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()
电话。我想这只是一个错字,而不是在您的程序中,因为它不会以这种方式编译。
它不会泄漏。该库知道要释放多少,因为它在内部跟踪每个块的分配大小。它这样做的确切方式是一个实现细节,它可能会从一个版本malloc
到另一个版本发生变化malloc
,你不应该关心它。
不,你最后释放了 s 并且你使用的不超过 s。我会说你没事。