免费动态分配内存

时间:2013-01-22 02:02:16

标签: c free

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).

上面的代码会有内存泄漏问题吗?功能如何? “免费”知道需要释放多少内存?

3 个答案:

答案 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。我会说你没事。