当我为大型数组(例如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;
}
答案 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);