gpt4 book ai didi

c++ - 调试在嵌入式 Linux 设备上运行的 C/C++ 应用程序的内存泄漏

转载 作者:太空宇宙 更新时间:2023-11-04 05:43:06 25 4
gpt4 key购买 nike

我有一个在 ARM Cortex-A9 上运行的应用程序。当我输入代码的特定部分时,我可以在 Linux 任务 View “顶部”中看到应用程序的内存使用量不断增长,直到由于物理内存耗尽而被终止。

现在,我对此做了一些研究并尝试实现 mtrace,但它没有给我非常简洁的结果。基本上我得到了这样的东西

Memory not freed:
-----------------
Address Size Caller
0x03aafe18 0x38 at 0x76e73c18
0x53a004a8 0x38 at 0x76e73c18

我什至不认为这是一个大问题(也许是另一个较小的问题)。

我也无法使用 Valgrind(它可能会很好用),因为设备上没有足够的空间来安装它和编译器......

所以我担心我只需要检查代码并寻找可能导致内存使用量增加的东西。某处有这方面的指南吗?在代码中,几乎从不使用“malloc”或“new”。

我确实可以使用 gdb,如果这有帮助的话。

我不清楚的一件事是以下是否存在问题:

while(someloop){
...
double *someptr;
...
}

或者类似

while(someloop){
...
int32 someArray[100] = {0};
...
}

其中的代码中有很多。当该循环出现并实例化这些变量或指针时,它是继续使用可用空间,还是使用上次迭代中的空间?

最佳答案

如果在堆栈上分配,则内存将被重用。但是,通过在堆上分配,您需要删除。另外,如果您使用 double * ptr; 分配; ... ptr = new double[5],需要通过delete[]ptr删除。

在 C++ 中,您可以覆盖 new 和 delete 运算符来打印一些调试消息。

最好是使用 gdb 进行调试,看看创建了哪些对象而没有删除。

您可能在代码中使用了一个不会删除内部内容的类。

提示:对于小对象,在堆栈​​上分配既更快又更安全。

关于c++ - 调试在嵌入式 Linux 设备上运行的 C/C++ 应用程序的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40314336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com