Я пытаюсь закодировать буфер для входного файла. Буфер всегда должен содержать определенное количество данных. Если было использовано несколько байтов данных, буфер должен считывать данные из файла до тех пор, пока он снова не обретет определенный размер.
const int bufsize = 10;
int *field = malloc(bufsize*sizeof(int)); //allocate the amount of memory the buffer should contain
for(i=0;i<bufsize;++i) //initialize memory with something
*(field+i) = i*2;
field += 4; //Move pointer 4 units because the first 4 units were used and are no longer needed
field= realloc(field,bufsize*sizeof(int)); //resize the now smaller buffer to its original size
//...some more code were the new memory (field[6]-field[9]) are filled again...
Вот краткий пример того, как я пытаюсь это сделать в данный момент (без файлов, потому что это та часть, которая не работает), но realloc() всегда возвращает NULL. В этом примере использовались первые 4 единицы, поэтому указатель должен двигаться вперед и выделяться недостающие данные в конце памяти (чтобы она снова содержала 10 элементов). Что я делаю не так?
Я был бы очень благодарен, если бы кто-то мог мне помочь
field += 4; //Move pointer 4 units because the first 4 units were used and are no longer needed
и как ты собираешьсяfree
это делать? но realloc() всегда возвращает NULL, и поэтому вы должны использовать временную переменную, чтобы иметь возможностьfree
field
в случае сбояrealloc
. - person Iharob Al Asimi   schedule 11.01.2015realloc
, не является адресом, возвращенным отmalloc
,calloc
илиrealloc
. Вы не можете передать любой адрес, который находится где-то в диапазоне динамически выделенного буфера. Это должен быть ненулевой адрес, непосредственно возвращаемый одной из этих функций без изменений. - person WhozCraig   schedule 11.01.2015