社区
C++ 语言
帖子详情
动态申请内存(NEW)常常失败,为什么?
geland
2004-09-10 12:44:32
我在程序里经常会申请存储空间,不知道为什么,NEW操作常常会抛出异常,申请失败,数量一般每次是100K之内,还有就是如果有一次失败了的话,后面的申请操作全部都失败,请大家帮忙分析有那些原因,机器上的内存是有的,就是说我作过实验,在别的程序里,循环申请几百M内存都不会失败。
...全文
482
26
打赏
收藏
动态申请内存(NEW)常常失败,为什么?
我在程序里经常会申请存储空间,不知道为什么,NEW操作常常会抛出异常,申请失败,数量一般每次是100K之内,还有就是如果有一次失败了的话,后面的申请操作全部都失败,请大家帮忙分析有那些原因,机器上的内存是有的,就是说我作过实验,在别的程序里,循环申请几百M内存都不会失败。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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)
C++中
new
申请
内存
失败
抛出异常的处理
正常情况下,执行
new
操作时都能
申请
到
内存
,并返回一个有效的地址。但在某些异常的情况下,会出现
申请
内存
失败
的情况。
new
操作返回NULL
申请
不到
内存
,或者
new
时抛出异常,可能有以下几种原因引起的: 1)用户态的
内存
已经达到了上限,
申请
不到
内存
了 有可能是虚拟
内存
占用太多,也有可能代码中有
内存
泄露,导致用户态的
内存
被消耗完了。 2)进程中的
内存
碎片过多 如果进程中在大量的
new
和delete,产生了大量的小块
内存
碎片,可用的
内存
大多是一小块一小块的小
内存
块,而要
申请
的是一块长......
C++ 中 用
new
申请
堆空间
失败
之后,怎么进行错误处理
在使用
new
运算符时,如果
动态
分配
内存
失败
,将返回一个空指针。在这种情况下,我们可以通过检查返回的指针是否为空来判定分配
内存
是否成功。一种处理
申请
堆空间
失败
的方法是抛出异常。可以使用 std::bad_alloc 异常类来表示
内存
分配
失败
的情况。 一种处理
申请
堆空间
失败
的方法是抛出异常。可以使用 std::bad_alloc 异常类来表示
内存
分配
失败
的情况。
new
申请
内存
失败
了乍办
1.标准C++ 里,如果
new
分配
内存
失败
,默认是抛出异常的。 首先按c++标准的话,
new
失败
会抛出bad_alloc异常 try { double *ptr=
new
double[1000000]; } catch(bad_alloc &memExp) { //
失败
以后,要么abort要么重分配 cerr<<memExp.what()<&...
【C++】
动态
内存
分配详解(
new
/
new
[]和delete/delete[])
一、为什么需要
动态
内存
分配? 在C++程序中,所有
内存
需求都是在程序执行之前通过定义所需的变量来确定的。 但是可能存在程序的
内存
需求只能在运行时确定的情况。 例如,当需要的
内存
取决于用户输入。 在这些情况下,程序需要
动态
分配
内存
,C ++语言将运算符
new
和delete合成在一起。 (1)特点 1.C++中通过
new
关键字进行
动态
内存
申请
2.C++中的
动态
内存
分配是基于类型进行的 ...
动态
分配
内存
new
和delete
栈:存储局部变量、函数参数和返回值。栈区的效率很高,但是空间很小,如果需要处理大量的数据,就必须使用堆区的
内存
动态
分配
内存
new
和delete使用堆区的
内存
有四个步骤:1)声明一个指针;2)用
new
运算符向系统
申请
一块
内存
,让指针指向这块
内存
;3)通过对指针解引用的方法,像使用变量一样使用这块
内存
;4)如果这块
内存
不用了,用delete运算符释放它。如果
申请
成功,返回一个地址;如果
申请
失败
,返回一个空地址(暂时不考虑
失败
的情况)。delete 地址;
C++ 语言
64,651
社区成员
250,488
社区内容
发帖
与我相关
我的任务
C++ 语言
C++ 语言相关问题讨论,技术干货分享,前沿动态等
复制链接
扫一扫
分享
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++
技术论坛(原bbs)
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
请不要发布与C++技术无关的贴子
请不要发布与技术无关的招聘、广告的帖子
请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下
试试用AI创作助手写篇文章吧
+ 用AI写文章