假设我非常防御性地编写代码,并且总是检查我调用的所有函数的返回类型。
所以我喜欢:
char* function() {
char* mem = get_memory(100); // first allocation
if (!mem) return NULL;
struct binder* b = get_binder('regular binder'); // second allocation
if (!b) {
free(mem);
return NULL;
}
struct file* f = mk_file(); // third allocation
if (!f) {
free(mem);
free_binder(b);
return NULL;
}
// ...
}
注意free()
事情失控的速度有多快。如果某些功能失败,我必须先释放每个分配。代码很快变得丑陋,我所做的就是复制粘贴所有内容。我成为了一名复制/粘贴程序员,更糟糕的是,如果有人在两者之间添加了一条语句,他必须修改下面的所有代码来调用free()
他的添加。
有经验的 C 程序员如何解决这个问题?我什么都想不通。
谢谢,博达赛多。