标题:求助,找素数的程序,个数超过1000个后在win7 和 Xp 中出错,在Linux 超过9 ...
只看楼主
up2u4u
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-10-22
结帖率:0
已结贴  问题点数:10 回复次数:4 
求助,找素数的程序,个数超过1000个后在win7 和 Xp 中出错,在Linux 超过9000以上报错
出错就是在win7中弹出对话框,“停止响应” ,在XP中立即退出,在linux中报 segment fault .
 
程序代码:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>

int main(void)
{
    unsigned long  *p_primes=0;
    unsigned int total;
    bool found=false;

    printf("input the number of primes ,at least 4\n");
    fflush(stdout);
    scanf("%d",&total);
    fflush(stdin);
    total=total<=4?4:total;
    p_primes=(unsigned long *)malloc(total);
    if(p_primes==NULL){
        printf("can't allocate memory !\n");
        return 1;
    }

    *p_primes=2UL;
    *(p_primes+1)=3UL;
    *(p_primes+2)=5UL;
    unsigned int count=3U;
    unsigned long trial=5UL ;

    while(count<total){
        trial+=2UL;

        for(size_t i=0;i<count;i++){
            if(!(found=trial%*(p_primes+i))){
                break;
            }
        }
        if(found){
            *(p_primes+count++)=trial;
        }
    }

    for(size_t i=0;i<total;i++){
        if(i%5==0){
            printf("\n");
        }
        printf("%lu\t",*(p_primes+i));
    }
    printf("任意键退出");
    fflush(stdout);
    getchar();

}


 
搜索更多相关主题的帖子: linux 对话框 Linux win7 9000 
2011-11-01 01:07
wuyunxong
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:43
专家分:148
注 册:2011-10-26
得分:5 
兄弟,只看到你malloc了,什么时候free了?
内存泄漏了吧?!
2011-11-01 07:11
embed_xuel
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:贵宾
威 望:58
帖 子:3845
专家分:11385
注 册:2011-9-13
得分:5 
segment fault一般都是指针问题,p_primes=(unsigned long *)malloc(total);有问题,你是按照char型分配空间,而p_primes是unsigned long 指针,肯定越界了。

总有那身价贱的人给作业贴回复完整的代码
2011-11-01 07:31
up2u4u
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-10-22
得分:0 
回复 2楼 wuyunxong
程序在使用分配的内存后立即结束了,不存在内存泄露的问题。嘿嘿,仍然谢谢你!

[ 本帖最后由 up2u4u 于 2011-11-1 11:10 编辑 ]
2011-11-01 11:09
up2u4u
Rank: 1
等 级:新手上路
帖 子:5
专家分:0
注 册:2011-10-22
得分:0 
回复 3楼 embed_xuel
谢谢你啊,确实是如此 ,我太粗心了。
2011-11-01 11:11



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-353952-1-1.html




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

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