Проверка распределения malloc / calloc - PullRequest
0 голосов
/ 27 декабря 2018

Кажется хорошей практикой программировать каждый раз после использования malloc / calloc проверять, был ли адрес asagin.

Есть ли возможность создать функцию для проверки успешного распределения?когда мы приводим тип, мы приводим тип точки каждый раз, поэтому функция не будет знать, какой это тип указателя.

Например:

newUser -> name = (char*)malloc(NAME_LENGTH*sizeof(char));
    if (newUser -> name == NULL){
        printf("Allocation of newUser failed\n");
        exit(1);
    } 

User *newUser = (User*)malloc(sizeof(User));
    if(newUser == NULL){
        printf("Allocation of newUser failed\n");
        exit(1);
    }

Может ли быть создана функция, которая получаетnewUser и newUser -> name и выйдет, если выделение не удалось?

1 Ответ

0 голосов
/ 27 декабря 2018

Во-первых, не приведите возвращаемое значение malloc, так как это может скрыть другие ошибки.

Нет проблем с переносом malloc в функцию, которая будет иметь нулевое значениепроверить для вас.Поскольку malloc принимает size_t и возвращает void *, ваша функция-обертка должна делать то же самое.Например:

void *safe_malloc(size_t s)
{
    void *p = malloc(s);
    if (!p) {
        perror("malloc failed");
        exit(1);
    }
    return p;
}

Затем вы можете использовать эту функцию в любом месте, где вы используете malloc без явной проверки NULL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...