Что-то не так в обработке ошибок этой функции? - PullRequest
0 голосов
/ 13 февраля 2019

Что-то не так в обработке ошибок этой функции?В частности, я предполагаю, что в этих 2 строках:

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 голосов
/ 13 февраля 2019

Если src равно нулю, вы потеряете память, выделенную для nodeCopy.Проверка src перед выделением памяти позволит избежать этого.

Кроме того, если бы это был рабочий код, у вас возникли бы проблемы с созданием разумного сообщения об ошибке, не разбивая его на две отдельные проверки.

0 голосов
/ 13 февраля 2019

Прямо сейчас вы обрабатываете как значение параметра NULL, так и возврат NULL из malloc одинаково.Возможно, вы захотите сделать что-то другое для каждого из них.

В случае, если 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...