Проходные указатели с местом, выделенным malloc - PullRequest
0 голосов
/ 31 мая 2011

Я только что написал функцию, которая возвращает указатель на блок памяти, выделенный malloc.Если я вызову free () для возвращенного указателя, освободит ли это память?

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

Это, вероятно, в основном простой, я думаю, я не могу найти информацию, потому что я ищу ее неправильно.

Любая помощьоценили!

Ответы [ 3 ]

3 голосов
/ 31 мая 2011

Да, вызов free освободит память.Освобождается не указатель, а освобождается память, на которую указывает указатель.

1 голос
/ 31 мая 2011

Вы должны передать free() значение , полученное из malloc().

int *x = malloc(42 * sizeof *x);
int *p = &x[0];
free(p);                /* ok, same as free x; x and p have the same value */

Редактировать: другой пример

int *x = malloc(42 * sizeof *x);
for (k = 0; k < 24; k++) *x++ = 0; /* zero first 24 elements */
free(x - 24);
0 голосов
/ 31 мая 2011

Не совсем понятно, что вы спрашиваете здесь, но если то, что вы спрашиваете:

Can I call free() on a pointer which points to a location within the allocated block?

тогда ответ «нет» - вы должны передать free() точный указатель, который вы получили от malloc(). Попытка free() внутреннего указателя или указателя на память, которая не была выделена malloc(), может привести к повреждению памяти или падению.

...