不使用printf时的Segfault

Sea*_*VDH 3 c linux printf for-loop segmentation-fault

我正在使用POSIX线程,在我的程序结束时,我正在等待加入每个线程.经过一段时间的完美运行后,我的代码在等待线程时开始返回一个奇怪的错误.

pthreads threads[C+P];

for(i = 0; i < (C+P); i++)
{
    printf("%d\n", i);  
    pthread_join(threads[i]);
}
Run Code Online (Sandbox Code Playgroud)

如果我删除了printf语句,或者将其替换为任何其他printf语句,延迟或对i的任何其他操作,我仍然会遇到段错误.

我该如何开始调试呢?

Cod*_*ers 6

插入printf()调用会影响内存布局(因此,它可以通过纯粹的意外掩盖一些内存损坏)以及执行时序(您使用线程,因此时序也是相关的).

但是,您应该进行一些常规调试,而不是任何猜测:

  • gdb下运行你的可执行文件,这样你应该能够看到导致崩溃的确切操作,从哪里调用,等等.

  • 下运行它的valgrind -这个工具检测到很多常见的错误,比如访问free'd内存块,使用未初始化的变量,数组超过/缓冲边界等的情况并不少见,立即获得与错误的确切位置valgrind,我强烈推荐它!