Intereting Posts
Как отменить 4 байта целого числа без знака? понимание fork (), sleep () и stream процессов Как узнать, когда я должен освободить строки в C, возвращенные библиотечными функциями? c, gets (), fgets () MPI Spawn: корневой процесс не передает дочерние процессы реализация школьного подразделения на 32-битных кусках на x86 Поиск типов данных одинаковой точности в нескольких языках программирования, например C / C ++, D, Go как c компилятор обрабатывает unsigned и signed integer? Почему код сборки для беззнаковой и подписанной арифметической операции одинаковый? Printf без новой строки в сборке Этот код сборки ничего не делает Как структурировать # включает в C Есть ли какая-либо польза от использования epoll с очень небольшим количеством файловых дескрипторов? Программа TSR для изменения характера символов на экране в windows / dos ncurses api с языком программирования D Как включить для gcc

C free () и инкрементные указатели массива

Будет ли работать функция free() если я динамически выделяю массив, а затем передаю не исходный указатель, а указатель на середину массива? Пример:

 int* array = malloc(10 * sizeof *array); if(array) { array += 5; // adjusting the indicies free(array); } 

Или мне нужно установить указатель обратно в начало массива перед вызовом free() ?

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

нет

(И «Да», вам нужно «установить его обратно».)

API требует, чтобы вы только перешли на free() именно то, что вы получили от malloc () 1 .


1. Или нулевой указатель.