int i;
char *s = (char*)malloc(sizeof(char)*10);
for(i = 0; i <= 4; ++i)
s[i] = 'a';
s[5] = '\0';
printf("%s\n", s);
free(s).
上面的代码会不会有内存泄露的问题?功能如何 “free”知道需要释放多少内存吗?
最佳答案
您的代码中没有内存泄漏。关于你的第二个问题,当你调用malloc
,发生的不仅仅是将内存还给你。 C 库保留一些空间来放置它自己的标题和簿记信息,以便在您调用 free
时使用。它可以做正确的事。
关于您的代码的一些编辑注释:
您不需要转换
malloc()
的返回值在 C 程序中。void *
之间的转换(malloc()
返回)和其他指针类型在 C 中是隐式的。sizeof(char)
是1
, 为什么要写出来呢?您的循环将三个字符写入
s
, 然后你的程序在添加s[4]
之前跳过一个字符 (\0
) .这有点奇怪。你是不是想用i <= 4
在你的循环中,或者可能是s[4] = '\0'
之后呢?你有一个
.
而不是;
在你的free()
之后称呼。我想这只是这里的错字,而不是你的程序中的错字,因为它不会那样编译。
关于c - 释放动态分配的内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14450414/