社区
C++ 语言
帖子详情
动态申请内存(NEW)常常失败,为什么?
geland
2004-09-10 12:44:32
我在程序里经常会申请存储空间,不知道为什么,NEW操作常常会抛出异常,申请失败,数量一般每次是100K之内,还有就是如果有一次失败了的话,后面的申请操作全部都失败,请大家帮忙分析有那些原因,机器上的内存是有的,就是说我作过实验,在别的程序里,循环申请几百M内存都不会失败。
...全文
532
26
打赏
收藏
动态申请内存(NEW)常常失败,为什么?
我在程序里经常会申请存储空间,不知道为什么,NEW操作常常会抛出异常,申请失败,数量一般每次是100K之内,还有就是如果有一次失败了的话,后面的申请操作全部都失败,请大家帮忙分析有那些原因,机器上的内存是有的,就是说我作过实验,在别的程序里,循环申请几百M内存都不会失败。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
26 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
Wolf0403
2004-09-10
打赏
举报
回复
比较奇怪,step in 一下看看,是不是分配的数量有错误……
geland
2004-09-10
打赏
举报
回复
谢谢热心的朋友们!
geland
2004-09-10
打赏
举报
回复
我就是说有这方面经验的朋友给一些忠告!
goodluckyxl
2004-09-10
打赏
举报
回复
不会吧
new是在堆上分配
只要有虚存都是可以分配的
是不是os出了问题
重起一下看看有没有问题
freefalcon
2004-09-10
打赏
举报
回复
好像是比较奇怪
freshairfly
2004-09-10
打赏
举报
回复
这怎么分析啊,什么都没有。。。。
lsdkzkald
2004-09-10
打赏
举报
回复
不是编译器问题或者IDE吧。
真是奇怪啦。
sdot
2004-09-10
打赏
举报
回复
来晚了,要说的话都被人说完了,哈哈
ly2004_mj
2004-09-10
打赏
举报
回复
我有点奇怪?为什么不用数组来做,而非要用指针?我倒觉得哪一种方法好使就用哪一种方法!
geland
2004-09-10
打赏
举报
回复
怎么跑题了呀,我的问题还没有解决呀
liluvu
2004-09-10
打赏
举报
回复
要在类的构造函数里为p分配空间吧
talentyang
2004-09-10
打赏
举报
回复
在 new 分配了移个a的指针, achout->p分配了一个char*的指针
achout->p="string" 指向了一个静态存储区,
用gets()怎么能写.
hearlihong
2004-09-10
打赏
举报
回复
呵呵
漂流的代码
2004-09-10
打赏
举报
回复
来晚了,哈哈
chenqing1128
2004-09-10
打赏
举报
回复
牛×
thunderclap
2004-09-10
打赏
举报
回复
achout =new a; //new 了一个char*的空间,用来存放指针p的地址&p
achout->p="string"; //使p指向一个字符串常量。
gets(achout->p); //企图修改常量的内容#83,你厉害啊。
hearlihong
2004-09-10
打赏
举报
回复
哦,这样啊。谢谢了,那么new到底做了什么呢?
geland
2004-09-10
打赏
举报
回复
你实际上只分配了一个char *的空间,该指针没有指向合法的存储区域!
geland
2004-09-10
打赏
举报
回复
你并没有为分配到空间,
achout->p="string";表示P指向了一个只读存储区,
你用gets(achout->p);是要往里面写,肯定会错的
hearlihong
2004-09-10
打赏
举报
回复
include <stdio.h>
#include <iostream>
class a {
public:
char *p;
};
int main(void)
{ a *achout;
achout =new a;
achout->p="string";
printf("%s\n", achout->p);
gets(achout->p);
printf("%s\n", achout->p);
return 0;
}
我这里也有个关于内存分配的问题。
我在a中已经用new为p分配了空间,并且可以将“string”赋值到p中去,但是当我用gets函数输入的时候就出错,为什么?
还有,当我用new分配的时候,我的p到底被分配了多少空间呢?
是动态分配吗?
加载更多回复(6)
引发
new
/malloc
动态
申请
内存
失败
的常见原因分析与总结
本文结合以往项目中遇到的多个问题实例,给大家详细总结一下引发
动态
申请
内存
失败
的常见原因,以供借鉴或参考。
C++中
new
申请
内存
失败
抛出异常的处理
正常情况下,执行
new
操作时都能
申请
到
内存
,并返回一个有效的地址。但在某些异常的情况下,会出现
申请
内存
失败
的情况。
new
操作返回NULL
申请
不到
内存
,或者
new
时抛出异常,可能有以下几种原因引起的: 1)用户态的
内存
已经达到了上限,
申请
不到
内存
了 有可能是虚拟
内存
占用太多,也有可能代码中有
内存
泄露,导致用户态的
内存
被消耗完了。 2)进程中的
内存
碎片过多 如果进程中在大量的
new
和delete,产生了大量的小块
内存
碎片,可用的
内存
大多是一小块一小块的小
内存
块,而要
申请
的是一块长......
malloc分配
内存
失败
会导致什么问题?
new
和malloc在
申请
空间时超出可
申请
的大小就会分配异常,可
申请
的大小是多少?
malloc分配
内存
失败
会导致什么问题?
new
和malloc在
申请
空间时超出可
申请
的大小就会分配异常,可
申请
的大小是多少?
C++ 中 用
new
申请
堆空间
失败
之后,怎么进行错误处理
在使用
new
运算符时,如果
动态
分配
内存
失败
,将返回一个空指针。在这种情况下,我们可以通过检查返回的指针是否为空来判定分配
内存
是否成功。一种处理
申请
堆空间
失败
的方法是抛出异常。可以使用 std::bad_alloc 异常类来表示
内存
分配
失败
的情况。 一种处理
申请
堆空间
失败
的方法是抛出异常。可以使用 std::bad_alloc 异常类来表示
内存
分配
失败
的情况。
new
和malloc
申请
内存
失败
后的处理
1.c++标准
new
失败
是抛出异常的,Visual C++ 6.0中返回一个NULL指针. 使用
new
(std::nothrow)可以保证
失败
时返回NULL; 因此完全可以#define
new
new
(std::nothrow) . 2.使用 malloc/calloc 等分配
内存
的函数时,一定要检查其返回值是否为“空指针”,返回空指针表示
申请
内存
失败
。 eg: #define ne...
C++ 语言
65,192
社区成员
250,525
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章