草庐IT

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

coder 2023-06-17 原文

我有这样的代码:我分配了两次 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/

有关c - asprintf() : how to free the pointers?的更多相关文章

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

    我有这样的代码:我分配了两次log,第一个&log是否有潜在的内存泄漏?char*log=NULL;asprintf(&log,"Hello:%s",name);if(known_person==true){asprintf(&log,"%s,%s",log,",myoldfriend.");}free(log); 最佳答案 是的,代码会泄漏,因为asprintf既不检查也不尝试重用前一个指针。因此,内存只是丢失了。避免示例中问题的最佳方法是将代码重写为char*log=NULL;if(known_person==true)aspr

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

    我有这样的代码:我分配了两次log,第一个&log是否有潜在的内存泄漏?char*log=NULL;asprintf(&log,"Hello:%s",name);if(known_person==true){asprintf(&log,"%s,%s",log,",myoldfriend.");}free(log); 最佳答案 是的,代码会泄漏,因为asprintf既不检查也不尝试重用前一个指针。因此,内存只是丢失了。避免示例中问题的最佳方法是将代码重写为char*log=NULL;if(known_person==true)aspr

随机推荐