2015-02-21 6 views
0

Если вы используете malloc() для выделения памяти для 4 целых чисел, не должен ли он возвращать адрес памяти первого целого числа? И если да, то не должно free() освободить только первое целое из памяти, а остальные останутся?C Свободная память, используя бесплатно

+0

Вы спрашиваете, должен ли C-код явно создавать утечки памяти? – juanchopanza

+0

Я просто хочу знать, как это работает –

+0

Нет, вы должны 'free()' весь блок, на самом деле, если вы передадите указатель, который не был возвращен одной из функций '' malloc() ', это неопределенное поведение. –

ответ

3

не должен бесплатно() только освободить первое целое число из памяти, в то время как все остальные остались позади

Нет, это не следует, так как в противном случае вызов free приведет к памяти большую часть времени течет.

Чтобы ответить на вопрос, который, я думаю, вы могли бы задать, free должен де-выделить весь блок памяти, на который указывает его аргумент. То, как это происходит, зависит от реализации, но для достижения этой цели нужно вести бухгалтерский учет за кулисами.

3

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

+0

Относительно примечания, если вы рассматриваете альтернативу,' malloc() 'должен отслеживать каждый индивидуальный байт, так как 'malloc()' не знает тип данных, которые вы намерены вставить там (например, 'malloc (8)' может быть восемь байтов, два 32-битных целых числа или одно 64-разрядное целое число). – Arkku

Смежные вопросы