【问题标题】:Does any of those scenarios create memory leak?这些场景中的任何一个都会造成内存泄漏吗?
【发布时间】:2017-07-27 00:50:17
【问题描述】:

我正在努力调试一个大型 c++ 程序,几个小时后内存不足,这些情况是否会造成内存泄漏?

场景1:使用&(没有delete或类似的东西):

inline int testFunc(std::vector<int>& peaksArray, int& tmp) {
for (int Index : peaksArray) 
{
tmp++
}
}

场景2:使用char[](没有delete或类似的东西):

char debug[500];    

我从不在我的程序中使用:

  • new
  • * 声明
  • delete(也许我应该?)

感谢您的回答,

问候

【问题讨论】:

  • 这就是你的所有代码吗?我的意思是,内存泄漏的任何其他来源?可能只是您的向量(或任何其他容器)实际上变得太大了?
  • 您发布的代码不会泄漏内存。
  • 内存泄漏是指内存被分配然后从不被释放。上述任何事情是否会导致内存被分配然后永远不会被释放?
  • 您可能会使用越来越多的资源而不会泄漏,或者您可能会因为内存不足而出现碎片。

标签: c++ memory-leaks


【解决方案1】:

如果你不使用new,就不要使用delete。局部变量具有声明它们的范围的默认生命周期。一旦该范围结束,尝试使用该变量会导致未定义的行为。

【讨论】:

  • 在迂腐的意义上,它们被称为具有“自动存储持续时间”的变量
【解决方案2】:

似乎您确实理解它 - 除了一个例外:在您的示例中,调试是一个堆栈变量,就像其他所有东西一样。 new 或 malloc 在堆上创建,其他所有内容(局部变量等)都在堆栈上。并且 main 的局部变量与任何其他函数的变量没有什么不同。

共享内存是一种相当罕见的情况,您通常不需要它,因此除非您明确要求,否则您不会拥有它(否则,某个随机的另一个进程可能会使用您的进程使用的相同内存 - 显然,这会严重破坏事情)。

更多信息请查看here

猜你喜欢
  • 2013-03-07
  • 1970-01-01
  • 2011-07-14
  • 1970-01-01
  • 1970-01-01
  • 2019-03-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多