page contents
发现
问答
发起
提问
文章
文章
更多
专家
讲堂
话题
财富榜
商城
Toggle navigation
问答
文章
精品课
商城
冒泡
搜索
我要提问
立即登录
免费注册
首页
问答
正文
内存块太小导致malloc和new返回空指针,该怎么处理?
轩辕小不懂
发布于 2022-01-08 10:48
阅读 1167
收藏 0
答案
1
分类:
C/C++开发
c
c++
默认排序
时间排序
2841
Nen
2022-01-08 10:54
- 程序员
对于malloc来说,需要判断其是否返回空指针,如果是则马上用return语句终止该函数或者exit终止该程序;
对于new来说,默认抛出异常,所以可以使用try...catch...代码块的方式:
try {
int *ptr = new int[10000000];
} catch(bad_alloc &memExp) {
cerr << memExp.what() << endl;
}
还可以使用set_new_handler函数的方式:
void no_more_memory() {
cerr << "Unable to satisfy request for memory" << endl;
abort();
}
int main() {
set_new_handler(no_more_memory);
int *ptr = new int[10000000];
}
在这种方式里,如果new不能满足内存分配请求,no_more_memory会被反复调用,所以new_handler函数必须完成以下事情:
让更多内存可被使用:可以在程序一开始执行就分配一大块内存,之后当new_handler第一次被调用,就将这些内存释放还给程序使用;
使用另一个new_handler;
卸除new_handler:返回空指针,这样new就会抛出异常;
直接抛出bad_alloc异常;
调用abort或exit。
评论 (
0
)
请先
登录
后评论
您需要登录后才可以回答问题,
登录
或者
注册
关注
1
关注
轩辕小不懂
提出于 2022-01-08 10:48
全部
轩辕小不懂 的其他提问
类似问题
什么是多线程,它有哪些不同的状态?
1 回答
1167 阅读
C# 中的匿名类型是什么?
1 回答
1167 阅读
使用 MyBatis 的 mapper 接口调用时有哪些要求?
1 回答
1167 阅读
请写一个C函数,若处理器是Big_endian的,则返回0;若是Little_endian的,则返回1。
1 回答
1167 阅读
请说出static和const关键字尽可能多的作用?
1 回答
1167 阅读
编写类String的构造函数、析构函数和赋值函数,已知类String的原型为?
1 回答
1167 阅读
×
发送私信
发给:
内容:
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
对于malloc来说,需要判断其是否返回空指针,如果是则马上用return语句终止该函数或者exit终止该程序;
对于new来说,默认抛出异常,所以可以使用try...catch...代码块的方式: