Jee*_*tel 1 c malloc valgrind memory-leaks
==20420==
==20420== HEAP SUMMARY:
==20420== in use at exit: 0 bytes in 1 blocks
==20420== total heap usage: 1 allocs, 0 frees, 0 bytes allocated
==20420==
==20420== Searching for pointers to 1 not-freed blocks
==20420== Checked 48,492 bytes
==20420==
==20420== 0 bytes in 1 blocks are still reachable in loss record 1 of 1
==20420== at 0x400677E: malloc (vg_replace_malloc.c:195)
==20420== by 0x80483D8: main (jig.c:10)
==20420==
==20420== LEAK SUMMARY:
==20420== definitely lost: 0 bytes in 0 blocks
==20420== indirectly lost: 0 bytes in 0 blocks
==20420== possibly lost: 0 bytes in 0 blocks
==20420== still reachable: 0 bytes in 1 blocks
==20420== suppressed: 0 bytes in 0 blocks
Run Code Online (Sandbox Code Playgroud)
在我的项目中看到我使用malloc像这样:
malloc(sizeof(some_structure) * some_expression);
Run Code Online (Sandbox Code Playgroud)
在某一点,some_expression给出值0,所以间接我正在做
malloc(0)
Run Code Online (Sandbox Code Playgroud)
因此,当我不打算使用malloc时,我不会释放它,但在这种情况下,valgrind会显示内存泄漏.为什么?
编辑:
如果我这样使用:
char *a = malloc(0);
Run Code Online (Sandbox Code Playgroud)
那么a不是NULL.所以问题是为什么不是NULL?&它存储哪个地址?
从我的malloc(3)联机帮助页(Linux):
如果size为0,则
malloc()返回或者是NULL稍后可以成功传递给的唯一指针值free().
因此,malloc当你传递0时,并不能保证不会分配任何空间,如果不是,你必须得到free它给你的指针NULL.
如果malloc不返回NULL,则会得到一个不能用于任何事情的缓冲区,但由于它具有唯一的地址,因此malloc必须至少分配一个字节.
也许你想malloc用一个来代替这个电话
// like malloc, but guarantees NULL return value if n==0
void *malloc0(size_t n)
{
return n ? malloc(n) : NULL;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
205 次 |
| 最近记录: |