相关疑难解决方法(0)

如何在C中的每次错误检查后避免长链的免费(或删除)?

假设我非常防御地编写代码,并且总是从我调用的所有函数中检查返回类型.

所以我喜欢:

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;
    }

    // ...
}
Run Code Online (Sandbox Code Playgroud)

注意free()事情失控的速度有多快.如果某些功能失败,我必须先释放每一个分配.代码很快变得丑陋,我所做的就是复制粘贴一切.我成为了一个复制/粘贴程序员,更糟糕的是,如果有人在其间添加一个声明,他必须修改下面的所有代码来调用free()他的添加.

经验丰富的C程序员如何解决这个问题?我无法解决任何问题.

谢谢,Boda Cydo.

c memory free allocation

16
推荐指数
3
解决办法
1371
查看次数

切换案例奇怪的范围

回顾一些第三方C代码我遇到了类似的事情:

switch (state) {
case 0: 
    if (c=='A') { // open brace
        // code...
    break; // brace not closed!
case 1:
    // code...
    break;
    } // close brace!
case 2:
    // code...
    break;
}
Run Code Online (Sandbox Code Playgroud)

在我正在审查的代码中看起来只是一个错字,但我很惊讶它编译时没有错误.

为什么这个有效的C?
与在预期位置关闭支撑相比,对此代码执行的影响是什么?
有什么情况可以使用吗?

编辑:在示例中,我查看了存在的所有中断(如上所述) - 但如果在0或1的情况下中断,则答案还可以包括行为.

c syntax switch-statement duffs-device

14
推荐指数
1
解决办法
1079
查看次数

标签 统计

c ×2

allocation ×1

duffs-device ×1

free ×1

memory ×1

switch-statement ×1

syntax ×1