我有一个插件系统在我的项目(在Linux上运行),而这部分是插件有一个“跑”的方法,如:在C++中调试参数损坏?
我打电话给我的插件,去检查我的argv数组(在做了一堆其他的东西之后),并且 数组已损坏。我可以在函数的顶部打印出数值,它们是正确的,但不会在执行过程中。很显然,有些东西正在破坏堆,但是我不知道如何确定什么是覆盖内存。 Valgrind并没有帮助我很多。
示例代码的请求:
我的插件看起来是这样的:
void test_fileio::run(int argc, char* argv[]) {
bool all_passed = true;
// Prints out correctly.
for (int ii=0; ii < argc; ii++) {
printf("Arg[%i]: %s\n", ii, argv[ii]);
}
<bunch of tests snipped for brevity>
// Prints out inccorrectly.
for (int ii=0; ii < argc; ii++) {
printf("Arg[%i]: %s\n", ii, argv[ii]);
}
}
这是链接到它公开到Python这样我就可以把这些插件,蟒蛇功能的系统。所以我有一个字符串参数,以我的Python功能,打破了这一点正是如此:那么
char** translate_arguments(string args, int& argc) {
int counter = 0;
vector<char*> str_vec;
// Copy argument string to get rid of const modifier
char arg_str[MAX_ARG_LEN];
strcpy(arg_str, args.c_str());
// Tokenize the string, splitting on spaces
char* token = strtok(arg_str, " ");
while (token) {
counter++;
str_vec.push_back(token);
token = strtok(NULL, " ");
}
// Allocate array
char** to_return = new char*[counter];
for (int ii=0; ii < counter; ii++)
to_return[ii] = str_vec[ii];
// Save arg count and return
argc = counter;
return to_return;
}
产生的argc和argv传递到上面提到的插件。
可以包含代码的样本,使其更容易为我们的同胞,以便用户了解你在做什么? – t0mm13b 2010-01-07 01:21:23
添加了示例代码,因为这个插件非常大,所以它是骨架的,但是这会给你提供问题所在的要点。 – 2010-01-07 01:25:24
我想我们可以告诉问题的本质是什么,但是您已经排除了任何有助于解决问题实际来源的问题。有一百万种不同的东西可能会破坏这个数组,但你遗漏了所有的代码。 – SoapBox 2010-01-07 01:34:19