printf以防止c中的分段错误

时间:2013-01-05 11:43:47

标签: c segmentation-fault

以下是函数的一部分。

l->length[l->cl] = atoi(p->wds[p->cw]);
printf("FD %d\n", l->length[l->cl]);
p->cw = p->cw + 1;
l->cl = l->cl + 1; 
printf("prevent from seg fault\n");
instr(p);

如果我删除printf("prevent from seg fault\n");我得到分段错误,但是如果我保留它就会运行并转到嵌套函数等等。

所以我的问题只是为什么会发生这种情况,我知道我没有显示足够的代码,所以你可以看到为什么分段发生了,但是如果有任何一般的解释,我也在另一个放在我的程序中,但最后我可以删除它?

关心Orri

1 个答案:

答案 0 :(得分:3)

就标准而言,对调用未定义行为的程序所做的任何更改都可以产生任何结果 - 不一定是它背后的逻辑。实际上,当遇到未定义的行为时,尝试推断给定实现的行为是非常有成效的。

如果对printf(或任何其他功能)的调用改变了你的程序的行为(当然,除了明显的打印应用之外),一个可能的解释是你有一个无效指针指向超出范围的局部变量。如果该变量以前存在于printf现在用于其自身局部变量的堆栈内存中,则意味着指针指向的内存现在将被新值覆盖。这当然可以改变使用指针的任何代码的行为。