mbq*_*mbq 7 valgrind memory-leaks
当Valgrind报告o字节丢失时,这意味着什么,就像这里:
==27752== 0 bytes in 1 blocks are definitely lost in loss record 2 of 1,532
Run Code Online (Sandbox Code Playgroud)
我怀疑它只是一个创造性使用的神器malloc,但确定是好的( - ;
编辑:当然真正的问题是它是否可以被忽略,或者它是一个有效的泄漏,应该通过释放这些缓冲区来解决.
Emp*_*ian 13
是的,这是一个真正的泄漏,应该修复.
当你malloc(0),malloc可能会给你NULL,或一个保证与任何其他对象的地址不同的地址.
既然您可能在Linux上,那么您将获得第二个.分配的缓冲区本身没有浪费空间,但是libc必须做一些内务处理,这确实浪费了空间,所以你不能malloc(0)无限期地继续做.
你可以用以下方法观察它:
#include <stdio.h>
#include <stdlib.h>
int main() {
unsigned long i;
for (i = 0; i < (size_t)-1; ++i) {
void *p = malloc(0);
if (p == NULL) {
fprintf(stderr, "Ran out of memory on %ld iteration\n", i);
break;
}
}
return 0;
}
gcc t.c && bash -c 'ulimit -v 10240 && ./a.out'
Ran out of memory on 202751 iteration
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2542 次 |
| 最近记录: |