【发布时间】:2012-09-17 05:05:07
【问题描述】:
假设有一个函数,它接收缓冲区的东西,并且可能需要将内存分配给函数范围内的缓冲区。它可能看起来像这样:
void func_with_buf( ...params..., char** buf ) {
if ( !buf ) {
buf = ( char** )calloc( ... );
}
/* more stuff here */
...
}
现在,稍后在这个函数中有另一个条件语句,它的计算结果为 false,如果在 if/条件语句中返回 false,则应该释放 buf 指向指针的指针,因为什么都做不了函数本身的更多内容。
所以,有两种方法可以解决这个问题,我想知道哪一种在可扩展性、重用等方面会被认为“更安全”和更实用。
方法 A)
char* buf;
if ( !func_with_buf( ..., &buf ) ) {
free( buf );
buf = NULL;
/* more error handling here */
}
方法 B)
char* buf;
if ( !func_with_buf( ..., &buf ) ) {
/* no need to free buf because func_with_buf handles deallocation internally. */
}
有些事情告诉我,方法 A) 将是推荐的方法,但我很好奇,想看看我是否看过任何东西。
另外,如果程序员需要释放一个指向指针的指针,是否只需将它传递给free(p) 并且它会处理它?还是我需要将其转换为相同类型的单个指针?
这么多问题……
【问题讨论】:
标签: c pointers memory-management buffer double-pointer