2016-08-12 107 views
0

下面的代码不会给出任何分配错误,但计数结束在大约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; 
    } 
+4

@Meninx:这是什么宇宙? '1024 * 1024 * 10 - > 10,485,760',绝对不会小于'10,000,000' –

+0

你指定一个char数组,然后用整数填充它的任何原因? –

+0

我现在看到你正在使用'C++'编译器,这就是为什么你需要施放'malloc' – Michi

回答

4

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可能会干扰内存分配错误。

+0

(1024 * 1024 * 10 mod 65536 = 0,所以上面malloc调用malloc(0)),这应该返回一个'NULL'指针,但这不会发生! – Howard

+0

所以,这里的问题是在TC++编译器中?那么,我应该替换它吗? – Howard

+0

@howard是的,你应该用新的东西替换这个编译器。 (你可能应该用更新的东西替换Windows XP,而你在这里;-) – zwol