Sono nel bel mezzo di un progetto e sto cercando di utilizzare malloc()
e realloc()
. So quando malloc, funziona, ma quando uso realloc, non cambia affatto la quantità di memoria allocata. Ho sempre pensato che realloc riassegnasse la tua memoria già malleata.La memoria non sta riallocando
Ecco quello che ho:
questo includono:
#include <stdlib.h>
ho una struct:
struct student {
int age;
int numOfClasses;
int gender; //0 male; 1 female
} student;
Quando voglio fare 7 di quei struct usando malloc, lo farò utilizzare questa riga di codice:
student stud* = (structure*) malloc(7*sizeof(student));
Questa linea funziona. Quella linea di codice prende la dimensione della struttura e moltiplica quella per 7. In breve, questo prenderà abbastanza memoria per creare una matrice di 7 strutture.
Ora, se voglio cambiare la situazione a 8, farei questo, dove A
è il precedente della memoria malloced, e B
è il nuovo malloced (o realloced) Memoria:
Ecco come ho in codice:
stud = (student*)realloc(stud, 8*sizeof(student));
Da quello che so, realloc prende la variabile nel secondo parametro e mallocs quella quantità di memoria. Quindi, prende il puntatore (o il precedente malloced) e riempie la memoria appena malloced con il maggior numero possibile dal puntatore specificato. Ovviamente, il secondo parametro deve essere più grande della dimensione del malloced precedente oppure stud
perderà un po 'di memoria alla fine. Ora questo è il mio problema. Quando chiamo la riga sopra, non cambia nulla. L'array malloced è ancora lungo 7. Sono abbastanza sicuro, anche, di avere abbastanza memoria per realloc.
Sto facendo bene? Dove potrebbe essere il mio problema?
Cosa ti fa pensare che l'array malloced sia ancora di lunghezza 7? –
Questo non si riferisce al tuo problema, ma penso che la tua struttura sia perfetta per un 'enum'. – teppic