XCode 读取 argv 时访问错误
XCode BAD ACCESS when reading argv
几分钟前,我的代码 运行 还很迷人。我已经尝试重新启动 XCode,我的电脑没有任何反应。这是重要的片段:
int main(int argc, const char * argv[]) {
string input_collection_index;
string input_directory;
bool is_retrieval=false;
bool is_merge = false;
//Arguments parsing
for(unsigned i = 1; i < argc; ++i) {
string param = argv[i];
//index file name
if(param == "--index" || param == "-i") {
i++;
input_collection_index = argv[i];
}
//index file path
else if (param == "--directory" || param == "-d") {
i++;
input_directory = argv[i];
}
else if (param == "--retrieval" || param == "-r") {
is_retrieval = true;
}
else if (param == "--merge" || param == "-m"){
is_merge = true;
}
}
}
这是我的方案:
我不断收到以下错误:
请注意,错误访问的地址不是 0x00,因此,它不是空的。 XCode 调试器向我显示 argc 的长度正确,并且 argv(至少 argv[0])是正确的字符串(文件路径)。
有什么想法吗?
因此,我认为问题更深层次且与 C++ 相关,而不是 XCode 本身。
在上面的代码片段之后,我创建了一个 class 有这个成员:
unsigned output_buffer_[9999999];
将其更改为
unsigned *output_buffer_;
然后在我的代码中分配它:
output_buffer_ = (unsigned*) malloc(9999999*sizeof(unsigned))
成功了。
也许与编译器如何处理静态分配的数组有关。
几分钟前,我的代码 运行 还很迷人。我已经尝试重新启动 XCode,我的电脑没有任何反应。这是重要的片段:
int main(int argc, const char * argv[]) {
string input_collection_index;
string input_directory;
bool is_retrieval=false;
bool is_merge = false;
//Arguments parsing
for(unsigned i = 1; i < argc; ++i) {
string param = argv[i];
//index file name
if(param == "--index" || param == "-i") {
i++;
input_collection_index = argv[i];
}
//index file path
else if (param == "--directory" || param == "-d") {
i++;
input_directory = argv[i];
}
else if (param == "--retrieval" || param == "-r") {
is_retrieval = true;
}
else if (param == "--merge" || param == "-m"){
is_merge = true;
}
}
}
这是我的方案:
我不断收到以下错误:
请注意,错误访问的地址不是 0x00,因此,它不是空的。 XCode 调试器向我显示 argc 的长度正确,并且 argv(至少 argv[0])是正确的字符串(文件路径)。 有什么想法吗?
因此,我认为问题更深层次且与 C++ 相关,而不是 XCode 本身。 在上面的代码片段之后,我创建了一个 class 有这个成员:
unsigned output_buffer_[9999999];
将其更改为
unsigned *output_buffer_;
然后在我的代码中分配它:
output_buffer_ = (unsigned*) malloc(9999999*sizeof(unsigned))
成功了。 也许与编译器如何处理静态分配的数组有关。