Die erste Zuweisung setzt ptr
auf die Adresse der lokalen Variablen studentContent
, die nächste Zeile überschreibt diese jedoch. Es ändert ptr
, um auf einen dynamisch zugewiesenen Puffer mit Platz für 2 Instanzen von struct contactInfo
zu verweisen.
Wenn das, was Sie wollen, ist ein Array von struct contactInfo
zu haben, und haben die Anzahl der Elemente des Arrays erhöhen, wie Sie mehrere Instanzen von struct contactInfo
zu füllen haben, Sie ptr
zu realloc
mit einer Größe von n * sizeof *ptr
vorbei, wo n
ist die Anzahl der Elemente im Array.
struct contactInfo *tmp_ptr = realloc(ptr, n * sizeof *ptr);
if (tmp_ptr == NULL) {
perror("realloc failed");
exit(1);
}
ptr = tmp_ptr;
Beachten Sie, dass Sie müssen keine Instanz von struct contactInfo
(studentContent
in Ihrem ursprünglichen Code) erklären, nur ein Zeiger auf ein.
EDIT:
Basierend auf Ihrem Kommentar, da Sie nur eine einzige Instanz benötigen, um zu füllen, ein Bohrfutter von Daten zu einem Zeitpunkt, zu lesen und zu schreiben, brauchen Sie keine dynamische Speicherzuweisung zu verwenden. Erklären Sie einfach eine einzelne Instanz und überschreiben Sie den Inhalt jedes Mal.
Warum reservieren Sie Platz für 2 Strukturen? Und was meinst du, wenn du sagst, dass die Größe der Inhalte anders sein wird? Wie das? –
Entschuldigung, vielleicht habe ich einen Fehler gemacht. Ich möchte Speicherplatz für 1 Struktur zuweisen. Der Inhalt wird bei jedem Looping anders sein. Ich durchlaufe eine Datei, die jede Zeile zieht und jede Zeile in ihrem respektierten Feld innerhalb der Struktur speichert. Nachdem ich alle Felder ausgefüllt habe, schreibe ich diese Inhalte in einer anderen Reihenfolge in eine Datei. Meine Schleife liest dann weiter die Datei und speichert den nächsten Satz von Daten in der Struktur, so dass die Felder beim zweiten Mal in der Größe variieren können. – bodotheguy
Sie können die Größe der Elemente in der Struktur nicht ändern. Sie werden immer die Größe haben, für die sie erklärt wurden. Wenn die Strings, die Sie in diese Arrays lesen, kleiner sind als die Größe des Arrays, ist das in Ordnung. Du musst nichts dagegen tun. –