Ich suchte nach einer Antwort, schaffte es aber nicht, eine zu finden.Neuzuweisung der dynamisch zugewiesenen Struktur
Ich habe eine dynamisch zugewiesene Struktur, was bedeutet, dass die Struktur selbst zugeordnet wird und einige ihrer Mitglieder. Wie:
typedef struct dataUse
{
char *num;
char *name;
char *position;
char *eMail;
float upload;
float download;
} DataUse;
DataUse *ptr = NULL;
Jetzt habe ich Funktionen Speicher für *ptr
neu zu verteilen und auch für *name
, *position
, *eMail
. Die Größe von name
, position
und variiert natürlich.
Jetzt verstehe ich, dass die Neuzuweisung etwas behält entweder die ursprüngliche Adresse der Daten und erhöhen Sie die Speichergröße oder wenn es nicht auf den gleichen Speicherplatz zuweisen kann, wird es seinen Inhalt kopieren und den Zeiger eine neue Adresse zuweisen.
Jetzt in meinem Fall, wenn ich meine struct
(*ptr
) umverteilen und wollen ihre Größe erhöhen und letzteres der Fall ist, wird mein structs Inhalt Bedeutung kopiert werden und neue Adresse unterzeichnet werden, was zu *name
passieren wird, *position
und ? Kann ich noch auf sie und die alten Inhalte über ptr->num
zugreifen. Werde ich eine Art Gedächtnisverlust haben?
Ich möchte nur jemanden zu überprüfen, was passieren wird und zu erklären, wie es im Speicher aussehen würde, wenn ich die gesamte Struktur neu zuordnen. Ich habe gesehen, wie Strukturen im Speicher aussehen Ich habe eine Menge Posts gelesen, aber manchmal wird es ein bisschen verwirrend, nachdem ich einige weitere Pointer hinzugefügt habe und tiefer gegangen bin (z. B. Doppelzeiger).
Und was würde passieren, wenn ich es mit Doppelzeiger tun würde - **ptr2
Zeiger zu halten, die auf Structs zeigen und dann realloc **ptr2
noch mehr Zeiger zu halten?
Was? 'Wenn ich meine Struktur neu zuweisen' - Ihre Struktur ist feste Größe! –
Immer wenn du dich fragst, "wie es in Erinnerung" aussehen würde, betrachte es als einen festen Schritt in die Rippen, um einen Debugger auf der Plattform zu starten, auf der du das ausführst und * tust * das: * Blick auf die Erinnerung *. Wie es "aussieht", wird dort besser demonstriert als anderswo. – WhozCraig
@Martin James- Meine Struktur ist nicht festgelegt. Ich habe eine Funktion, die meinem struct ex Speicher hinzufügt: 'void allocStruct (DataUse ** ptr) {Speicher hier zuweisen}'. – Name