首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >除了使用new之外,还有什么会导致内存泄漏?(c++)

除了使用new之外,还有什么会导致内存泄漏?(c++)
EN

Stack Overflow用户
提问于 2017-01-12 17:57:25
回答 3查看 101关注 0票数 0

除了使用new关键字分配内存之外,还有什么会导致C++中的内存泄漏?我有一个项目,似乎整个节目都有几处内存泄漏,但我一次都没有使用new关键字。此外,当我不小心让它运行了几个小时(4-6个小时)时,我回来后发现它也在慢慢地吞噬cpu周期。不确定这是否会是内存泄漏的直接结果(此时它几乎占用了我所有的可用内存),因为当再次启动程序时,它不会明显地发生,但内存泄漏是。谢谢!

EN

回答 3

Stack Overflow用户

发布于 2017-01-12 18:00:50

它可以是各种各样的东西,比如

  • 不断增长的列表,如添加到vector,并且从不removing
  • Forgetting以关闭打开的资源,如文件句柄、套接字等。
  • 如果您正在计算引用计数

,则第三方sockets引用中的内存泄漏

票数 1
EN

Stack Overflow用户

发布于 2017-01-12 18:26:07

  • 使用mallocrealloccalloc或平台特定的分配函数,如mmap并丢失返回的指针。
  • 使用本身分配内存的函数(可能是构造函数),但不调用相应的释放函数。例如,在不调用SDL_Quit.
  • Using第三方代码的情况下调用SDL_Init,即使使用正确,也会泄漏内存。
票数 1
EN

Stack Overflow用户

发布于 2017-01-12 18:04:18

有多种方法可以消耗CPU和内存。

分析是查看CPU使用情况的最佳工具。如果你有一些日志记录,你应该能够知道它在哪里花费时间。

字符串是内存使用的罪魁祸首-如果你在程序开始时读取了大量数据(例如XML config等),并且没有让它超出范围,即使你自己没有显式调用new,它也会一直挂在那里直到程序结束。保持句柄打开,例如数据库连接、文件等也会消耗资源。

如果不使用引用或其他方式进行共享,您也很容易结束复制数据。

试着找到一种简单的方法来衡量你正在做的事情,并从那里开始。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41610039

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档