抱歉,我无法具体说明代码,但我看到的问题是异常的。字符串值似乎会根据其他不相关的代码而改变。例如,下面传递的参数的值将仅根据我是否注释掉一两个 fprintf() 调用而改变!到最后一个 fprintf() 值通常是完全空的(不,我已经检查以确保我没有直接修改参数......我所要做的就是注释掉 fprintf() 或添加另一个 fprintf()并且字符串的值会在某些点发生变化!):
static process_args(char *arg) {
/* debug */
fprintf(stderr, "Function arg is %s\n", arg);
...do a bunch of stuff including call another function that uses alloc()...
/* debug */
fprintf(stderr, "Function arg is now %s\n", arg);
}
int main(int argc, char *argv[]) {
char *my_arg;
... do a bunch of stuff ...
/* just to show you it's nothing to do with the argv array */
my_string = strdup(argv[1]);
/* debug */
fprintf(stderr, "Argument 1 is %s\n", my_string);
process_args(my_string);
}
周围有更多的代码,所以我不能要求有人调试我的程序——我想知道的是如何调试为什么像这样的字符串会根据不相关的代码改变或覆盖它们的内存。我的记忆力有限吗?我的堆栈太小了?我该怎么说?我还能做些什么来追踪问题?我的程序并不庞大,它就像一千行代码给或取和几个动态链接的外部库,但没有什么不寻常的。
帮助!蒂亚!