为什么C无法为大型数组运行此程序?

时间:2011-06-20 10:56:15

标签: c

当我为大型数组(例如100000)运行此程序时,会出现以下错误: “一般保护”和第8行停止运行(即c [i] = 0;)。 我想知道你是否帮助我“如何修改以下程序才能运行”?

#include <stdlib.h>
float *c;
void main()
{
long i;
c=(float*) malloc (sizeof(float*)*100000);
for (i=0;i<100000;i++)
    c[i]=0;
}

4 个答案:

答案 0 :(得分:4)

试试这个:

int main(){ 
  float *c = malloc(sizeof(float) * 100000);
  for (int i=0; i<100000; i++)
    c[i]=0;

  return 0;
}

编辑:我在这里使用了一些C99功能,并且仅针对将int视为32位或64位的编译器运行。这应该在linux或Mac OS X上使用gcc运行。

答案 1 :(得分:2)

这应该是:

c=(float*) malloc (sizeof(float)*100000);

答案 2 :(得分:2)

我认为你使用的是16位编译器,malloc无法在一个连续的块中分配那么多内存。

我刚刚注意到您使用long作为循环变量而不是更常用的int,这进一步支持了我的猜测。

答案 3 :(得分:0)

  

浮动c;

这是一个浮点数,而不是一个数组。你可能意味着:

float *c;

  

c =(float)malloc(sizeof(float *)* 100000);

这会尝试将浮动数组转换为浮点数。同样,你可能意味着:

c = (float*) malloc (sizeof(float)*100000);