假设一个函数需要一个缓冲区来存放某些东西,并且可能需要将内存分配给函数范围内的缓冲区。它可能看起来像这样:
void func_with_buf( ...params..., char** buf ) {
if ( !buf ) {
buf = ( char** )calloc( ... );
}
/* more stuff here */
...
}
现在,稍后在这个函数中有另一个条件语句,它的计算结果为假,如果在 if/条件语句中返回假,则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)
它会处理它?还是我需要将其转换为相同类型的单个指针?
这么多的问题...