Первые присваивания ptr
по адресу локальной переменной studentContent
, однако следующая строка перезаписывает это. Он изменяет ptr
, чтобы указать на динамически выделенный буфер с пространством для 2 экземпляров struct contactInfo
.
Если что вы хотите иметь массив из struct contactInfo
, и есть число элементов этого увеличения массива, как у вас есть несколько экземпляров struct contactInfo
заселить, вы передаете ptr
к realloc
с размером n * sizeof *ptr
, где n
- количество элементов в массиве.
struct contactInfo *tmp_ptr = realloc(ptr, n * sizeof *ptr);
if (tmp_ptr == NULL) {
perror("realloc failed");
exit(1);
}
ptr = tmp_ptr;
Обратите внимание, что вы не должны объявить экземпляр struct contactInfo
(studentContent
в исходном коде), только указатель на один.
EDIT:
Основываясь на ваш комментарии, так как вы просто нужен один экземпляр для заполнения для того, чтобы читать и писать один патрон данных в то время, вам не нужно использовать динамическое выделение памяти. Просто объявляйте один экземпляр и каждый раз перезаписывайте содержимое.
Почему вы выделяете пространство для 2-х структур? И что вы имеете в виду, когда говорите, что размер содержимого будет другим? Как так? –
Извините, может быть, я ошибся. Я хочу выделить пространство для 1 структуры. Содержимое будет отличаться при каждом цикле. Я перебираю файл, потянув за каждую строку, сохраняя каждую строку в своем уважаемом поле внутри структуры. После того, как я заполнил все поля, я пишу в файл эти содержимое в другом порядке. моя петля продолжит чтение файла и сохранит следующий набор данных в структуре, чтобы поля могли отличаться по размеру во второй раз. – bodotheguy
Вы не можете изменить размер элементов в структуре. Они всегда будут размером, который они объявили. Если строки, которые вы читаете в этих массивах, меньше размера массива, все в порядке. Тебе не нужно ничего делать. –