c a*_*abe 0 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);
Run Code Online (Sandbox Code Playgroud)
如果我删除printf("prevent from seg fault\n");我得到分段错误,但如果我保持它运行并转到嵌套函数等等。
所以我的问题只是一般为什么会发生这种情况,我知道我没有展示足够的代码所以你可以看到为什么会发生分段,但是如果对此有任何一般性解释,我也在我的另一个地方有这个程序,但最后我可以删除它吗?
问候奥里
就标准而言,对调用未定义行为的程序所做的任何更改都可能产生任何结果 - 其背后不一定有逻辑。事实上,当遇到未定义的行为时,尝试推理给定实现的行为很少有成果。
也就是说,如果对printf(或任何其他函数)的调用改变了程序的行为(当然,除了打印它应该做的明显改变之外),一种可能的解释是你在某处有一个指向本地的无效指针超出范围的变量。如果该变量以前位于堆栈内存中,而现在由printf它自己的局部变量使用,这意味着指针指向的内存现在将被一个新值覆盖。这当然可以改变任何使用指针的代码的行为。