为了账号安全,请及时绑定邮箱和手机立即绑定

什么情况下才需要用new申请内存?

什么情况下才需要用new申请内存?

C++
爲吾之梦想 2016-06-01 23:35:10
在学new之前   我们写一段代码  int *p;*p=20;cout<<*p<<endl;   这段代码可以打印20;  但是并不需要申请内存,所以我想知道什么情况下才需要用new申请内存!!
查看完整描述

3 回答

已采纳
?
onemoo

TA贡献883条经验 获得超454个赞

只有这几句,你确定能打印出20??

也许只有极小的可能性会打印出20。

你只是声明了一个int指针p,你没有让p没有指向任何有意义的东西!(当然准确地说,p指向一个随机地址;或者当p是全局变量时,p就是NULL)

然后你就向*p赋值?  这值会赋给一个随机地址(或是NULL地址)!  这有极大极大的可能性会导致程序segmentation fault。


只声明一个指针并不会为它分配内存的。 一般使用指针是让它指向有意义的地址,如指向既有的变量。或是用new申请一块内存给指针。

函数中的对象会随着函数的结束而销毁。 当你需要一个对象可以长期存在或是不想让它随函数销毁的话,就要用new申请一块内存。 不过要记住这块内存需要你手动管理生存期,不用时要记得delete掉。

查看完整回答
反对 回复 2016-06-02
  • 爲吾之梦想
    爲吾之梦想
    其实 我很难理解 在什么情况下我们需要去分配内存 我记得大一上学期学 Hello Wrold时候 当时没有分配内存 但是依旧可以输出hello world!!!现在学了 new ,我总是纠结 难道在写任何程序之前都需要申请内存吗?
  • onemoo
    onemoo
    所有变量(对象)都占据一块内存,变量的类型是决定这块内存是做什么用的。 你在代码中定义的变量,都是被分配了内存的。 如:int a; 这一句就定义了一个叫a的int变量,同时已经分配了一块内存(一般4 bytes)。 如果你写的是 int a = 10; 含义和前面一样,只不过你让它的初始值为10。 你写的"hello world"几个字也是被存在某块内存中的,当然可以打印出来,你自然也不用特意为他们new一块内存。 你在定义变量的时候,就已经分配给它们内存了。 如回答中所说,定义在函数中的变量会随函数的结束而销毁,当你需要一个变量一直存在,或者就是想要一块额外内存的时候,才用new。
  • 爲吾之梦想
    爲吾之梦想
    谢谢你的回答 懂了
?
dxyz

TA贡献14条经验 获得超1个赞

*号那个应该是指针变量吧?没学过啊,围观一下吧。

查看完整回答
反对 回复 2016-06-02
?
慕粉3187274

TA贡献18条经验 获得超13个赞

目前的情况下 new申请空间一般不会失败,那个错误处理也是为了以防万一用的 要么你就在try块里自己扔出一个异常来模拟一下

查看完整回答
反对 回复 2016-06-02
  • 3 回答
  • 0 关注
  • 1778 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信