【发布时间】:2018-01-29 13:46:05
【问题描述】:
1) 函数是否应该检查它的每个指针参数是否为 NULL?
void do_stuff(char** object1, char** object2, ...) {
if (object1 == NULL) {
return;
}
if (object2 == NULL) {
return;
}
...
2) 当一个函数创建一个动态对象时,它应该返回一个指向新创建的对象的指针还是应该将它分配给它的参数?
void allocate_object(char** object);
或
char** allocate_object(void);
3) 当一个函数打算分配一个对象但没有分配时,如何通知调用者分配结果?
return -1;
或
object = NULL;
4) 谁(通常)负责(检查、免费)指针参数:函数还是它的调用者?
5) 是否有任何指南或资源可以回答类似问题?
使用 C++ 和它的类,每个对象都有它的所有者。这与 RAII 和异常处理一起帮助我回答了我的问题。在 C 中,我还没有理解这一点。
【问题讨论】:
-
C 和 C++ 是两种不同的语言,实践非常不同,请选择。也请一次只问一个问题。
-
我把 C 和 C++ 都放在了,因为 1) 我提到了 C++ 2) 我理解 C++ 中的这些概念并试图找到 C 的相应答案 3) 通过证明一个更好地指定我的问题C++ 中的示例。
-
避免所有原始指针。而不是通过引用测试 NULL 使用传递。
-
@CorellianAle 您没有提供任何 c++ 示例...
-
您的大部分问题必须由设计和规范处理。 F.e.如果设计保证它永远不会传递一个函数,则函数不必检查空参数。但是,在调试和开发过程中,无论如何都要谨慎地检查它,发出消息并中止(并在生产前删除代码)
标签: c pointers memory-management arguments