| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 637 人关注过本帖
标题:百思不得其解的运行结果
只看楼主 加入收藏
fjqdxq
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-7-2
收藏
 问题点数:0 回复次数:5 
百思不得其解的运行结果
    我做的谭浩强《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
广陵绝唱
Rank: 10Rank: 10Rank: 10
等 级:贵宾
威 望:29
帖 子:3607
专家分:1709
注 册:2008-2-15
收藏
得分:0 
根据我在我的机器上调试的结果表明:程序运行时间的长短取决于COUNT 的数值,而不在于 printf 语句。
2009-11-30 23:29
fjqdxq
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2008-7-2
收藏
得分:0 
版主,你好。
我的意思是说,我把COUNT该为比较小时能够得到正确的答案。
当COUNT较大时,不加printf语句程序会很快终止。加了printf语句程序将一直执行。我执行了一个多小时也没见到结果。

谢谢支持!
2009-12-01 08:58
xu362726904
Rank: 6Rank: 6
等 级:侠之大者
帖 子:160
专家分:471
注 册:2009-6-18
收藏
得分:0 
你的int i 不会超范围吗?整型不够
2009-12-01 12:18
caojulians
Rank: 2
等 级:论坛游民
帖 子:39
专家分:67
注 册:2009-11-15
收藏
得分:0 
1.malloc()返回值一定要测试,为NULL时表示内存分配失败,后继工作就无意义了。
老谭的东西还有一个错,有malloc()没有free()--这就是人们说的内存泄露
2009-12-01 14:10
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.016898 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved