【发布时间】:2021-09-01 22:07:59
【问题描述】:
我不明白为什么会发生下面的内存泄漏,以及如何避免它。
我正在使用 malloc 分配内存,并通过循环启动分配的内存,将字符串a中的值逐个复制到字符串b。
就我的理解而言,我不会留下任何没有使用的记忆。
我的代码:
#include <stdlib.h>
void run_test_one(void)
{
char *a;
char *b;
int i;
a = "up the irons";
b = (char *)malloc(13 * sizeof(char));
i = 0;
while(a[i] != '\0')
{
b[i] = a[i];
++i;
}
b[i] = '\0';
}
int main(void)
{
run_test_one();
return (0);
}
错误:
==9003==ERROR: LeakSanitizer: detected memory leaks
Direct leak of 13 byte(s) in 1 object(s) allocated from:
#0 0x7ffb28c1db40 in __interceptor_malloc (/usr/lib/x86_64-linux-gnu/libasan.so.4+0xdeb40)
#1 0x55a9533b29c6 in run_test_one test.c:10
#2 0x55a9533b2b04 in main test.c:22
#3 0x7ffb2876fbf6 in __libc_start_main (/lib/x86_64-linux-gnu/libc.so.6+0x21bf6)
SUMMARY: AddressSanitizer: 13 byte(s) leaked in 1 allocation(s).
【问题讨论】:
-
“泄漏”是指您创建或分配资源,但不销毁或释放它。就像你打电话给
malloc但从不打电话给free。那是泄漏。 -
IOW:在
b[i] = '\0';行之前添加free(b); -
@Jabberwocky 之后 我想你的意思是...... :)
标签: c memory-leaks malloc