试图看看导致sigsev错误的原因

时间:2014-03-19 15:09:47

标签: c

#include <stdio.h>
#include <stdlib.h>

int main(void) {


   long size = 10000000;

   long i = 0;

   while (i < size) {
    printf("%d\n", i);  
    i++;


}

   return EXIT_SUCCESS;
}

/*
++++++++++++++++++++++++++++++++++++++++++++++++++++++


but commenting out printf, i get no error - even traced in a debugger and jumping to   breaks after the while loop, i am able to get i reach the 10 billion mark.
just like below - 


++++++++++++++++++++++++++++++++++++++++++++++++++++++++
*/


#include <stdio.h>
#include <stdlib.h>

int main(void) {


long size = 10000000;

long i = 0;

while (i < size) {
    //printf("%d\n", i);    
    i++;


}

return EXIT_SUCCESS;
}

3 个答案:

答案 0 :(得分:3)

您使用long的错误说明符来调用未定义的行为。请改用%ld

答案 1 :(得分:2)

您应该使用%ldprintf long值(%d代替int)。

printf()

  

指定要打印的数据的参数。 如果任何参数不是相应转换说明符所期望的类型,或者参数少于格式所需的参数,则行为未定义。如果格式所需的参数多于所需的参数,则会评估并忽略无关的参数

答案 2 :(得分:0)

您的调试器应该能够提供回溯,以便您可以在segfault时查看堆栈顶部(即当前正在运行)的功能。在gdb中,这将是bt commnd。