我執行了下面的C程序,它在給定的N(N < 4294967295)下打印一個素數。它在SunOS中執行時效果不錯,但是在Ubuntu中運行時(使用gcc編譯器編譯它),我得到Segmentation fault(核心轉儲)。任何人都可以讓我知道我出錯的地方。提到SunOS中的編譯器版本以下和Ubuntu 12.10在Ubuntu的C程序運行時錯誤。但執行SunOS
cc -V
CC:化Sun C 5.9 SunOS_sparc補丁124867-01 2007/07/12
gcc -v
使用內置的規格。 COLLECT_GCC = GCC COLLECT_LTO_WRAPPER =/usr/lib中/ GCC/x86_64的-Linux的GNU/4.7/LTO-包裝 目標:x86_64的-Linux的GNU 配置有:../src/configure -v --with-pkgversion ='Ubuntu/Linaro 4.7.2-2ubuntu1'--with-bugurl = file:///usr/share/doc/gcc-4.7/README.Bugs --enable-languages = c,C++,go,fortran,objc ,obj-C++ --prefix =/usr --program-suffix = -4.7 --enable-shared --enable-linker-build-id --with-system-zlib --libexecdir =/usr/lib --without -included-gettext --enable-threads = posix --with-gxx-include-dir =/usr/include/C++/4.7 --libdir =/usr/lib --enable -nls --with-sysroot =/- -enable-clocale = gnu --enable-libstdcxx-debug --enable-libstdcxx -time = yes --enable-gnu-unique-object --enable-plugin --enable -objc -gc --disable-werror - with-arch-32 = i686 --with-tune = generic --enable-checking = release --build = x86_64-linux-gnu --host = x86_64-linux-gnu --target = x86_64-linux-gnu 線程模型:POSIX gcc版本4.7.2(Ubuntu的/ Linaro的4.7.2-2ubuntu1)
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<inttypes.h>
int main()
{
FILE *fpin,*fpout;
char ch[11], file_name[100];
long long int num1=0,i,tmp=0;
long long int *arr;
printf("enter file name:: ");
gets(file_name);
fpin = fopen(file_name,"r");
fpout = fopen("/home/code/output.c","w");
while(1)
{
fgets(ch,11,fpin);
if (!feof(fpin))
{
num1=atoll(ch);
arr = prime_number(num1);
for(i=0;*(arr+i)!='\0';i++)
{
fprintf(fpout,"%llu",*(arr+i));
if(*(arr+i+1) == '\0')
fputc('.',fpout);
else
fputc(',',fpout);
}
}
else
{
fclose(fpin);
fclose(fpout);
break;
}
}
}
prime_number(long long int n)
{
long long int i,j,total=0,a[200];
int count=0;
printf("\n%llu \n",n);
for (j=2;j<=n;j++)
{
count = 0;
for (i=1;i<=j;i++)
{`enter code here`
if ((j%i) == 0)
count++;
if (count > 2)
break;
}
if (count==2)
{
a[total] = j;
total++;
}
}
return(&a[0]);
}
除了返回一個局部變量的地址之外,'a [200]'有點小以存儲素數在任何非平凡的範圍內。而你的主要測試效率非常低下(儘管你一旦發現第三個除數就「破」了,這是一個好的開始)。除了平方根之外,合數的最小素因數不能超過平方根。 –
嗨@DanielFischer按照您的建議嘗試,執行時間縮短一半。謝謝 –