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