| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 637 人关注过本帖
标题:百思不得其解的运行结果
取消只看楼主 加入收藏
fjqdxq
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-7-2
收藏
 问题点数:0 回复次数:2 
百思不得其解的运行结果
    我做的谭浩强《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这条语句后,程序能长时间运行而不退出,不加时
却很快退出。

    谢谢各位。                     
搜索更多相关主题的帖子: 运行 百思不得其解 结果 
2009-11-30 21:18
fjqdxq
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-7-2
收藏
得分:0 
版主,你好。
我的意思是说,我把COUNT该为比较小时能够得到正确的答案。
当COUNT较大时,不加printf语句程序会很快终止。加了printf语句程序将一直执行。我执行了一个多小时也没见到结果。

谢谢支持!
2009-12-01 08:58
fjqdxq
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-7-2
收藏
得分:0 
谢谢3位专家,在这个程序中我并没有考虑free。
我现在的问题焦点是:
COUNT较大时,不加printf语句程序会很快终止。加了printf语句程序将一直执行,并且显示malloc 整型数。
从这个结果知道,内存分配是成功的。难道不加printf语句内存分配就失败,加了这样一条无意义的语句后就
成功了。这样好像没有道理??
2009-12-01 16:35
快速回复:百思不得其解的运行结果
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027496 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved