在h文件中定义:
char *copiedText;
在c文件中定义:
char *copyText(char *text){
if (copiedText != 0) free(copiedText);
copiedText = (char *)calloc((strlen(text) + 1) * sizeof(char), sizeof(char));
strcpy(copiedText, text);
return copiedText;
}
首先,这不是关于如何复制文本,我只是选择它作为示例。我的问题是关于 calloc() 之前的 free()。
我听到您问的第一个问题是为什么不在适当的时候使用 free() - 即当不再需要复制文本时?
长话短说,我正在制作一个程序的一部分,我不能相信我的函数的用户会正确地 free() copiedText,所以我想在我的函数中包含尽可能多的代码。他们所做的只是包含 h 和 c 文件并调用函数 copyText。
我知道在最后一次调用 copyText 和程序终止之间会有(轻微的)内存泄漏,但这是我愿意接受的权衡,因为我只有 malloc() 少量数据。
问题很简单,当像这样编码时,free() 是否真的会释放我的 calloc() 分配的内存?
最佳答案
现在的另一面是:
copyText()
返回的指针仅在下一次调用copyText()
之前有效 -- 这对调用者来说一点也不明显 并且可能值得尽可能突出地记录下来;- 该函数不是线程安全的。
更好的方法可能是需要一个显式的 free()
(也许将它包装在一个名为 freeText()
的函数中,作为 copyText( )
).
另一种方法是让调用者提供他们自己的缓冲区及其大小(这样就可以避免缓冲区溢出)。
关于c - 后续函数调用中的 malloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8081460/