Jestem w trakcie trwania projektu i próbuję użyć malloc()
i realloc()
. Wiem, kiedy malloc, to działa, ale kiedy używam realloc, to w ogóle nie zmienia ilości przydzielonej pamięci. Zawsze jednak, że ten realloc ponownie przydzieli twoją już wyciśniętą pamięć.Pamięć nie przenosi się ponownie
Oto co mam:
obejmować:
#include <stdlib.h>
Mam struct:
struct student {
int age;
int numOfClasses;
int gender; //0 male; 1 female
} student;
Kiedy chcę zrobić 7 z tych strukturach za pomocą malloc, będę użyj poniższego kodu:
student stud* = (structure*) malloc(7*sizeof(student));
Ta linia działa. Ten wiersz kodu przyjmuje rozmiar struktury i mnożników przez 7. W skrócie, to chwyci wystarczającą ilość pamięci, aby utworzyć tablicę złożoną z 7 struktur.
Teraz, jeśli chcę zmienić na 8, chciałbym to zrobić gdzie A
jest poprzednia pamięć malloced i B
jest nowy malloced (lub realloced) Pamięć:
Oto jak mam go w kodzie:
stud = (student*)realloc(stud, 8*sizeof(student));
Z tego, co wiem, realloc bierze zmienną w drugim parametrze i mallocs, że ilość pamięci. Następnie pobiera wskaźnik (lub poprzedni malloced) i wypełnia właśnie malloced memory ile można z danego wskaźnika. Oczywiście drugi parametr musi być większy niż poprzedni rozmiar malloced, lub stud
straci trochę pamięci na końcu. Teraz to jest mój problem. Kiedy zadzwonię do powyższej linii, nic nie zmienia. Szeroka tablica zachowuje długość 7 lat. Jestem prawie pewna, że mam wystarczająco dużo pamięci, aby móc ją ponownie wykorzystać.
Czy robię to dobrze? Gdzie może być mój problem?
Co sprawia, że tablica malloced wciąż ma długość 7? –
Nie dotyczy to twojego problemu, ale myślę, że twoja struktura doskonale nadaje się do 'wyliczenia '. – teppic