百思不得其解的运行结果
我做的谭浩强《C语言程序设计》(第三版)第11章第9,题目是:13个人围成一圈,从第一个人开始顺序报号1、2、3。凡报道“3”者
退出圈子。找出最后留在圈子里的人原来的序号。
我写的程序如下:
#include <stdio.h>
#include <malloc.h>
#define COUNT 99999999
struct locate
{
unsigned int a;
unsigned int loc;
struct locate *next;
}*p,*q,*head;
int main(void)
{
int i;
int j = 1;
int sum = COUNT;
head = p = (struct locate*)malloc(sizeof(struct locate));
for(i = 1;i <= COUNT;i++)
{
//printf("malloc %d\n",i);
q = (struct locate *)malloc(sizeof(struct locate));
q->a = 1;
q->loc = i;
p->next =q;
p = q;
}
p->next = head->next;
p = head->next;
while(1)
{
p=p->next;
if(sum == 1)
{
while(p->a == 0)
p = p->next;
break;
}
if(p->a == 1)
j++;
if(j == 3){
p->a =0;
j = 0;
sum--;
}
}
printf("%d\n",p->loc);
return 0;
}
我的程序是在linux环境下编译运行的。最初把COUNT设为比较小的一个数,
程序能够输出正常的结果。后来自己考虑到内存的分配与释放的问题,故意把
COUNT修改成一个比较的大的数,程序运行短暂报terminal而退出。
为了查出程序的错误出现在那里,我将红色部分的注释去掉,这样程序
能运行较长时间,并一直显示“malloc 数字”,表明程序正在分配内存
我想问的问题是:
为什么加了printf这条语句后,程序能长时间运行而不退出,不加时
却很快退出。
谢谢各位。