这样使用new会不会造成内存泄漏

_eeach 2018-05-02 04:37:02
对new和delete使用不当会造成内存泄漏,下面的简短程序会造成内存泄漏吗?

在microsoft visual C++6.0环境下下输出test,也没有报错。
但是get_char()函数里用new申请的内存空间没有delete会造成内存泄漏吗?
如果会,应该在何处delete呢?求指教。
...全文
884 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
Khan_xp 2018-05-11
  • 打赏
  • 举报
回复
可以去github或者知乎上问一下大佬
赵4老师 2018-05-03
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
狐狸小十 2018-05-02
  • 打赏
  • 举报
回复
引用 9 楼 sinat_41738615 的回复:
我把sizeof()改为了strlen()+1,然后加入了7楼给的语句,如下图 再次运行,输出为test,但是弹出一条调试错误,如下 这个是什么意思呢?我用的IDE是microsoft visual c++,是不是和这个有关系?
越界了 p = new char[n]; delete[] p;
_eeach 2018-05-02
  • 打赏
  • 举报
回复
我把sizeof()改为了strlen()+1,然后加入了7楼给的语句,如下图 再次运行,输出为test,但是弹出一条调试错误,如下 这个是什么意思呢?我用的IDE是microsoft visual c++,是不是和这个有关系?
赵4老师 2018-05-02
  • 打赏
  • 举报
回复
没有银弹!
@风轻云淡_ 2018-05-02
  • 打赏
  • 举报
回复
在main函数里释放,释放的原则是在哪里用完,就在哪里释放,就拿你这个来说,在printf语句后面,添加if(p){delete p; p =NULL:}
_eeach 2018-05-02
  • 打赏
  • 举报
回复
感谢各位的帮助和指正。内存泄漏确实不会报错,sizeof指针的值是4.其实这个问题是从一本书上的一个程序衍生的,程序定义了一个类,在构造函数中用了new,析构函数中用了delete,但是有一个成员函数也用了new,析构函数delete的时候回一并释放内存吗?代码如下:
zhagoodwell 2018-05-02
  • 打赏
  • 举报
回复
这个代码sizeof(charstring)是4并不是你想的你所传入的 字符串的空间大小
白色一大坨 2018-05-02
  • 打赏
  • 举报
回复
引用 2 楼 qq_40162781 的回复:
内存泄露好像不会报错吧
是的,内存泄漏不会报错,触发触发了其他地方调用这块内存才会导致问题,所以c++相对比较困难就在这里。 一旦出现泄漏问题,是比较难查的,故需要培养良好的编程习惯。
zhagoodwell 2018-05-02
  • 打赏
  • 举报
回复
C语言上是这样~不清楚c++是不是也这样
qq_40162781 2018-05-02
  • 打赏
  • 举报
回复
内存泄露好像不会报错吧
cain-won 2018-05-02
  • 打赏
  • 举报
回复
当然会内存泄漏了。在用完资源的时候就要delete掉。所以是在main函数里

64,637

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧