#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;
}
答案 0 :(得分:3)
您使用long
的错误说明符来调用未定义的行为。请改用%ld
。
答案 1 :(得分:2)
您应该使用%ld
至printf
long
值(%d
代替int
)。
指定要打印的数据的参数。 如果任何参数不是相应转换说明符所期望的类型,或者参数少于格式所需的参数,则行为未定义。如果格式所需的参数多于所需的参数,则会评估并忽略无关的参数
答案 2 :(得分:0)
您的调试器应该能够提供回溯,以便您可以在segfault时查看堆栈顶部(即当前正在运行)的功能。在gdb中,这将是bt
commnd。