And*_*eri 2 c valgrind memory-leaks realloc dynamic-memory-allocation
我不明白为什么valgrind(版本3.14)没有在此程序中检测到可能的内存泄漏:
#include <stdlib.h>
int main() {
int *p = malloc(sizeof(int));
p = realloc(p, 2 * sizeof(int));
free(p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
C99标准(ISO / IEC 9899:1999,第314页)表示以下内容realloc:
如果无法分配用于新对象的内存,则不会释放旧对象,并且其值不变。[...] realloc函数返回指向新对象的指针(该值可能与指向旧对象的指针的值相同),如果无法分配新对象,则返回null指针。
因此,它可能发生的p是NULL,但与以前分配的存储单元malloc仍然存在,不应该这是一个可能的内存泄漏?
如果我使用编译程序gcc -std=c99并执行valgrind,--tool=memcheck --leak-check=full --track-origins=yes则会显示以下消息:
#include <stdlib.h>
int main() {
int *p = malloc(sizeof(int));
p = realloc(p, 2 * sizeof(int));
free(p);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
Valgrind不会分析您的代码。它分析您的代码采取的行动。
在此特定运行realloc中没有失败,因此没有内存泄漏,因此valgrind没有任何报告:
所有堆块均已释放
这就是valgrind所知道的。
要检测代码中的问题,您需要一个静态代码分析工具。
| 归档时间: |
|
| 查看次数: |
69 次 |
| 最近记录: |