Ненужные указатели-броски в C - PullRequest
16 голосов
/ 20 сентября 2008

Я получил комментарий к моему ответу на эту тему:

Похоже, что Malloc внутри вызова функции освобождается при возврате?

Короче у меня был такой код:

int * somefunc (void)
{
  int * temp = (int*) malloc (sizeof (int));
  temp[0] = 0;
  return temp;
}

Я получил этот комментарий:

Могу я просто сказать, пожалуйста, не разыгрывайте возвращаемое значение malloc? Это не требуется и может скрывать ошибки.

Я согласен, что приведение не требуется в C. Это обязательно в C ++, поэтому я обычно добавляю их на тот случай, если мне придется портировать код на C ++ однажды.

Однако мне интересно, как такие приведения могут скрывать ошибки. Есть идеи?

Edit:

Похоже, с обеих сторон есть очень хорошие и веские аргументы. Спасибо за публикацию, ребята.

Ответы [ 12 ]

0 голосов
/ 20 сентября 2008

Одной из возможных ошибок (в зависимости от того, действительно ли вы этого хотите или нет) может быть неправильное указание с одной шкалой размеров и присвоение указателю другого типа. Например.,

int *temp = (int *)malloc(sizeof(double));

Могут быть случаи, когда вы хотите это сделать, но я подозреваю, что они редки.

0 голосов
/ 20 сентября 2008

Приведение функции, которая вместо (int *) возвращает (void *) вместо (int *), безвредно: вы приводите один тип указателя к другому.

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

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