gpt4 book ai didi

c - asprintf() : how to free the pointers?

转载 作者:IT王子 更新时间:2023-10-29 00:13:15 25 4
gpt4 key购买 nike

我有这样的代码:我分配了两次 log,第一个 &log 是否有潜在的内存泄漏?

char *log = NULL;
asprintf(&log, "Hello: %s", name);
if (known_person== true){
asprintf(&log, "%s, %s", log, ", my old friend.");
}
free (log);

最佳答案

是的,代码会泄漏,因为 asprintf 既不检查也不尝试重用前一个指针。因此,内存只是丢失了。避免示例中问题的最佳方法是将代码重写为

char *log = NULL;
if (known_person== true)
asprintf(&log, "Hello: %s, my old friend.", name);
else
asprintf(&log, "Hello: %s", name);

free (log);

这样,缓冲区被分配一次并正确释放。

或者,您可以使用两个指针

char *temp = NULL;
asprintf(&temp, "Hello: %s", name);

char *log = NULL;
if (known_person== true) {
asprintf(&log, "%s, my old friend.", temp);
free( temp );
}
else {
log = temp;
}

free (log);

关于c - asprintf() : how to free the pointers?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32406051/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com