C无法分配足够的内存

时间:2016-08-12 21:14:08

标签: c malloc

下面的代码没有给出任何分配错误,但是计数结束时大约是16970,内存分配错误并且系统停止 ,我使用Turbo C ++ 3.0 IDE ,Windows XP sp3 ,所有分区:NTFS ,PC:安装了2 GB RAM的Dell 1545。

#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;
    }

1 个答案:

答案 0 :(得分:4)

除非您专门启用保护模式,否则Turbo C ++在DOS环境中以实模式工作。在实模式下,内存空间被分成64k字节段,而size_t(malloc的参数)很容易为16位。 1024 * 1024 * 10 mod 65536 = 0,因此上面对malloc的调用适用于malloc(0)

malloc(0)的返回值是实现定义的,可能是非零的。 (what does malloc(0) return?)使用返回的指针是一个坏主意,Windows XP可能会干扰内存分配错误。