我有一個插件系統在我的項目(在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