如下分配内存的代码:
booleantempTag=true;
do
{
try
{
double *K=NULL;
int nnz;
cout<<"请输入分配内存大小(MB):"<<endl;
cin>>nnz;
nnz=nnz*1024*1024/8;
cout<<"开始为数组分配内存..."<<endl;
system("pause");
K =(double *) malloc (sizeof(double)*nnz);
if(K!=NULL){
cout<<"为数组K设置初值..."<<endl;
system("pause");
memset(K,0,sizeof(*K)*nnz);
cout<<"按任意键释放内存..."<<endl;
system("pause");
free(K);
}
else{
cout<<"内存分配失败!"<<endl;
}
}
catch (std::bad_alloc)
{
cout<<"内存分配失败,可能是由于内存空间不足,请按任意键继续..."<<endl;
}
} while (tempTag);
任意输入分配的内存数目,有时候会分配成功,有时候却出现内存分配失败。分配失败主要原因有两种可能,第一种可能就是系统的可用内存不足够分配,这也是常见的一种情况,通过增加内存条或重启系统,保证有足够的可用内存供分配,如下图所示:
还有一种情况,是很容易忽视的,特别是对于需要大量内存进行计算(大于2G)时,调试时出现类似于“retval = HeapFree……”错误,如下图:
当分配小块内存时,如分配500M时,能正常分配;但是当分配大块内存时,如分配2G内存时,就分配失败,但是系统的可用内存足够(大于2G)。这种情况下,主要是项目属性设置的问题。需要在项目属性页中设置“配置属性”——“链接器”——“系统”,设置“启用大地址”为“是”,如下图所示: