此函数的错误处理是否有问题?

时间:2019-02-12 21:49:47

标签: c error-handling

此函数的错误处理是否有问题?具体来说,我猜这两行:

if (!src || !nodeCopy)
    return NULL;

一次检查两个指针​​是否正确?

我将程序发送给老师,他说错误处理在某些功能中是错误的,例如。

此代码是用C语言编写的

Node * node_copy(const Node * src) {

Node *nodeCopy;

nodeCopy = (Node*) malloc (sizeof (Node));

if (!src || !nodeCopy)
    return NULL;

nodeCopy->id = src->id;
nodeCopy->nConnect = src->nConnect;
strcpy (nodeCopy->name, src->name);

return nodeCopy;
}

2 个答案:

答案 0 :(得分:1)

现在,您正在以相同的方式处理NULL参数值和从malloc返回的NULL。您可能想对它们每个做一些不同的事情。

src为NULL的情况下,很可能从该函数返回NULL。但是,如果malloc返回NULL,则通常意味着出现了非常错误的情况,程序应该exit

Node * node_copy(const Node * src) {
    Node *nodeCopy;

    if (!src)
        return NULL;

    nodeCopy = malloc(sizeof (Node));
    if (!nodeCopy) {
        perror("malloc failed");
        exit(1);
    }

    nodeCopy->id = src->id;
    nodeCopy->nConnect = src->nConnect;
    strcpy (nodeCopy->name, src->name);

    return nodeCopy;
}

答案 1 :(得分:1)

如果src为空,则将泄漏为nodeCopy分配的内存。在分配内存之前检查src可以避免这种情况。

此外,如果这是生产代码,那么您将难以在其中生成合理的错误消息而又不能将其分为两个单独的检查。