проверка того, что `malloc` преуспел в C - PullRequest
9 голосов
/ 09 апреля 2011

Я хочу выделить память с помощью malloc и проверить, что это удалось.что-то вроде:

if (!(new_list=(vlist)malloc(sizeof (var_list))))
  return -1;

как мне проверить успех?

Ответы [ 4 ]

21 голосов
/ 09 апреля 2011

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

Поскольку NULL оценивается как ложное в операторе if, вы можете проверить его очень просто:

value = malloc(...);
if(value)
{
    // value isn't null
}
else
{
    // value is null
}
6 голосов
/ 09 апреля 2011

Справочная страница:

В случае успеха функции calloc(), malloc(), realloc(), reallocf() и valloc() возвращают указатель на выделенную память. Если есть ошибка, они возвращают указатель NULL и устанавливают errno в ENOMEM.

5 голосов
/ 09 апреля 2011
new_list=(vlist)malloc(sizeof (var_list)
if (new_list != NULL) {
  /* succeeded */
} else {
  /* failed */
}
0 голосов
/ 20 октября 2016

Код, который вы уже тестировали на наличие ошибок, хотя я обычно пишу присвоение и проверяю его двумя отдельными строками:

new_list = malloc(sizeof *new_list);
if (!new_list)
    /* error handling here */;

(Обратите внимание на два небольших изменения - вы не должны приводить возвращаемое значение, имы берем размер из переменной, а не ее тип, чтобы уменьшить вероятность несоответствия).

Если malloc() не удается, возвращается нулевой указатель, который является единственным значением указателя, false.

Обработка ошибок, которую вы имеете, просто return -1; - как вы справляетесь с этим в вызывающей функции, действительно зависит от вас.

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