C不能分配足够的内存
问题描述:
下面的代码不会给出任何分配错误,但计数结束在大约16970与内存分配错误和系统暂停 ,我使用Turbo C++ 3.0 IDE ,Windows XP SP3 ,全部分区:NTFS ,PC:安装了2 GB RAM的Dell 1545。C不能分配足够的内存
#include <stdio.h>
#include <stdlib.h>
long counter=0;
int main(int argc, char *argv[])
{
char* array=(char*) malloc (1024*1024*10);
if (array==NULL)
{
/* allocation error */
return 1;
}
for (counter=0 ; counter<10000000;counter++)
array[counter] = 1; // trying to fill the array with one's
free (array);
return 0;
}
答
Turbo C++在DOS环境下工作,在真实模式下工作除非您特别启用保护模式。在实模式下,内存空间被分成64kbyte段,而size_t(malloc的参数)很容易就是16位。 1024 * 1024 * 10 mod 65536 = 0,所以上面的malloc调用运行到malloc(0)
。
malloc(0)的返回值是实现定义的,可能不为零。 (what does malloc(0) return?)使用返回的指针是一个坏主意,Windows XP可能会干扰内存分配错误。
@Meninx:这是什么宇宙? '1024 * 1024 * 10 - > 10,485,760',绝对不会小于'10,000,000' –
你指定一个char数组,然后用整数填充它的任何原因? –
我现在看到你正在使用'C++'编译器,这就是为什么你需要施放'malloc' – Michi