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