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).
上面的代码会有内存泄漏问题吗?功能如何? “免费”知道需要释放多少内存?
答案 0 :(得分:4)
您的代码中没有内存泄漏。关于你的第二个问题,当你打电话给malloc
时,更多的事情发生在你身边。 C库保留了一些空间来放置自己的标题和簿记信息,以便在您致电free
时它可以做正确的事情。
有关您的代码的一些编辑说明:
您不需要在C程序中转换malloc()
的返回值。 void *
(其中malloc()
返回)与其他指针类型之间的转换隐含在C中。
sizeof(char)
是1
,为什么还要写出来呢?
你的循环将三个字符写入s
,然后你的程序会在添加s[4]
之前跳过一个字符(\0
)。这有点奇怪。您的意思是在循环中使用i <= 4
,还是在s[4] = '\0'
之后使用{
在.
来电后,您有;
而不是free()
。我想这只是一个错字,而不是你的程序,因为它不会以这种方式编译。
答案 1 :(得分:2)
它不会泄漏。库知道要释放多少,因为它在内部跟踪每个块的分配大小。它的确切方式是实现细节,即使从发布到发布,也可能从malloc
更改为malloc
,您不应该关注它。
答案 2 :(得分:0)
不,你最后自由了,你不会使用超过s。我会说你没事。