c++申请大的内存空间(如何判断失败)
我想用new申请一个特别大的空间(多大都可以),主要是我不能判断到底是成功还是失败
假如我这样写 int *p_i=new int[1024*1024*1024];
网上说判断p是否为null
可我写了判断不出来啊
但是确实失败了
p[i]=xxxx;
系统就报错
各位大侠帮忙 只要我能判断 哪怕一个人回的 只要解决了 分全给你 在线等
[解决办法]
用new分配这么大的内存根本没有意义。默认windows堆大小是 1M
[解决办法]
LZ内存分配的太大了
[解决办法]
标准C++用抛出异常来处理new内存分配失败的问题,所以你可以这样写:
try
{
int *p_i=new int[1024*1024*1024];
}
catch(bad_alloc &memExp)
{
// 失败以后,要么 abort 要么重分配
cerr<<memExp.what()<<endl;
}
如果分配失败了,程序就跳过之后的代码,输出错误信息。
更具体的可以参考《Effective c++》。
[解决办法]
#include <iostream>
using namespace std;
int main()
{
int* p=new int[1024*1024];
if (NULL!=p) {
p[0]=1;
} else {
cout<<"指针未申请成功"<<endl;
}
}这样就可以
[解决办法]