
#include
main()
{
long long i,imax;
imax=pow(2,30);
float *P=(float *)malloc(imax * sizeof(float));
for(i=0;i
getch();
}
使用imax=pow(2,28)时可以正常运行,另外内存为8G的
这个问题实际上就是由于内存分配不足(从你使用imax=pow(2,28)时可以正常运行这个情况可以持出来),而你老禅又没有做内存检测造成的。
你做一下检测,再进行赋值运算才行。另外,你手动申请的内存,应该要记得释放。
虽然你的电脑,内存是8G,但实际上,这8G你开机之后就不可能有8G了,所以实际上你最多是分配御芦不到8G这么大的空间的。
#include
#include
#include "stdlib.h"
main()
{
long long i,imax;
imax=pow(2,30);//2的30次方
float *P=(float *)malloc(imax * sizeof(float));//sizeof(float)应该是4,所以你分配了2的32次方比特镇含带的空间,大约是4*1024*1024*1024,就是4G空间,运行这个程序前你最好去看下你的电脑,系统内存是不是还有4G
if(P==0)
{
printf("系统内存不足,请减小你需要申请的内存空间");
exit(0);
}
for(i=0;i
free(P);
getch();
}
8G 空间就是2的33次方比特这么大的空间。
你malloc这么大的内存,确定能分配得下来么?
按照C库的说法,这时候需要对于P进行检验,或者perror以下看看有没有问题。
这个肯定编译时没有问题,语法完全正确,但是全看态乱瞎你的C库实现方法以及陪态当帆空时的内存是否足够。
而且,用完别忘了free内存啊。。。
首先吧,你用的64位系统没错,橘孝但是32位程序的最大寻址空间如汪伍燃果包含程序进去的话肯定要大于4G了。你困虚编译的时候没有使用-m64标志吧,即使在64位系统下,dev默认编译的也是32位程序。按照32汇编的程序构成,数据段肯定超限了。