我正在努力调试几个小时后内存不足的大型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
(也许我应该?)感谢您的回答,
此致
答案 0 :(得分:6)
如果您不使用新内容,请不要使用删除功能。局部变量具有其声明范围的默认生命周期。一旦该范围结束,尝试使用该变量将导致未定义的行为。
答案 1 :(得分:1)
似乎你理解它 - 有一个例外:在你的例子中,debug就像其他一切一样是一个堆栈变量。 new或malloc在堆上创建,其他所有(局部变量等)都在堆栈上。主要的局部变量与任何其他函数的变量没有区别。
共享内存是一种相当罕见的情况,你通常不需要它,因此你不会拥有它,除非你明确要求它(否则,一些随机的另一个进程可能会使用你的进程使用的相同内存 - 显然,这会破坏事情。)
有关详细信息,请查看here。