我在'C'程序下运行,它有一个无限循环.我看到CPU使用'top'命令达到了近99%.然后突然程序停止了.我很想知道系统中的规则是什么导致它停止.
我在阿尔卑斯山的码头图像下运行:3.1(+一些模块)我只是简单地开始它的灰烬(阿尔卑斯山的狂欢).
另外,我找不到ulimit.
#include <stdio.h>
int main() {
int marks[10],i,n,sum=0;
printf("Enter number of students: ");
scanf("%d",&n);
for(i = 0; i < n; --i) {
//printf("Enter marks of student%d: ",i+1);
int c;
c = 5;
int a;
a = c;
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Ste*_*itt 10
正如你所提到的,你可以期待这产生一个无限循环,至少如果n
是积极的话.
你所看到的行为是由你的计数器缠绕造成的:当它到达时INT_MIN
,结果--i
是INT_MAX
(至少,在英特尔式CPU上使用GCC的默认设置 - 这在C中没有定义,见下文)并且i<n
失败.
因此,您的程序使用100%的一个CPU,而从0开始倒计时INT_MIN
,然后回绕INT_MAX
并停止.
你可以加
printf("%d\n", i);
Run Code Online (Sandbox Code Playgroud)
就在该return
行之前,查看i
循环退出时的值.
请注意,这是C中的未定义行为 ...如果您使用-O2
,至少使用GCC 5.3 编译它,程序永远不会退出循环,因为优化器决定永远不会达到退出条件,并将循环编译为紧无限循环如果n
是正(.L4: jmp .L4
).
归档时间: |
|
查看次数: |
167 次 |
最近记录: |