gpt4 book ai didi

c - ubuntu 中的 C 程序运行时错误。但在 SunOS 中执行良好

转载 作者:太空宇宙 更新时间:2023-11-04 07:28:50 26 4
gpt4 key购买 nike

我执行了下面的 C 程序,它打印了给定 N (N < 4294967295) 以下的素数。在 SunOS 中执行时它运行良好,但在 Ubuntu 中运行时出现段错误(核心转储)(使用 gcc 编译器编译)。任何人都可以让我知道我哪里出错了。下面提到SunOS和Ubuntu 12.10的编译版本

cc -V

抄送:Sun C 5.9 SunOS_sparc 补丁 124867-01 2007/07/12

gcc -v

使用内置规范。COLLECT_GCC=海湾合作委员会COLLECT_LTO_WRAPPER=/usr/lib/gcc/x86_64-linux-gnu/4.7/lto-wrapper目标: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。错误 --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线程模型:posixgcc 版本 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]);
}

最佳答案

在 prime_number 函数的末尾,您将返回一个指向变量的指针,该变量在 prime_number 函数本身(的堆栈)中定义。因为当函数存在时,其堆栈的内容实际上被蒸发了,您返回的是一个无效指针。

当然,根据您正在运行的系统、操作系统等,堆栈的内容可能不会立即被覆盖,并且会在短时间内出现,但这只是运气。

尝试分配返回结果(并释放调用者),或将数组传递给 prime_number 函数。这样,内容对调用者仍然有效。

关于c - ubuntu 中的 C 程序运行时错误。但在 SunOS 中执行良好,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15747400/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com