Ok c'è qualcosa che non va in una parte del codice che posto:
codice:
ALexception extendArray(arraylist_t* al, int dim){
int i;
item_t** tarray;
//general check
if(al == NULL){
printf("arraylisy not initialized or null\n");
return ALParametersError;
}
//realloc
tarray = (item_t**) realloc(al->array, al->size+dim);
if(tarray == NULL){
printf("error, memory full");
return ALMemoryError;
}
else{ //refresh and initialization
al->array = tarray;
al->size = al->size + dim;
for(i = al->size - dim; i< al->size; i++){
al->array[i] = returnVoidElement();
}
}
return ALSuccess;
}
la riga incriminata è quella della realloc
allora faccio qualche premessa. Si tratta di una funzione in uso in una libreria particolare che ho creato così per comodità. Semplicemente gestisce un mio tipo di array.
la struct di base è:
codice:
struct arraylist{
item_t** array;
int size;
};
L'extendArray serve per aumentare la dimensione dell'array nel caso io abbia richiesto un inserimento di un valore in una posizione che fuoriesce dalla size attuale dell'array (in teoria sarebbe una static, ma sto ancora decidendo se renderla disponibile al client nel caso voglia estendere l'array per altri motivi)
Fondamentalmente il mio array, col mio programma di test, al momento della chiamata è formato da tre item_t* creati da me nel main che sono inseriti in posizione 0-1-2.
Tutte le altre posizioni sono occupate da VUOTO che è un particolare item_t* gestito dalla mia libreria item.h, comunque non è che importi ora.
Quando chiamo la realloc succede qualcosa di strano °_°. Sin poco prima controllando con il debugger effettivamente tutte le posizioni dell'array sono settate a valore VUOTO, tranne 0-1-2 che appunto sono quelle in cui tramite il main ho inserito i miei oggetti
subito dopo la realloc però, sia in tarray sia in al->array il valore in posizione 3 cambia improvvisamente, senza motivo, settandosi ad un altro indirizzo che risulta non leggibile (infatti se chiamo la funzione che stampa tutto l'array, mi da un segmentation failure e anche gdb mi segnala sin subito dopo l'esecuzione della realloc che la posizione al->array[3] risulta non leggibile mentre tutte le altre sono effettivamente uguali al valore che avevano in precedenza, come dovrebbe essere)
Ora, che diavolo c'è di sbagliato? A che si deve questo comportamento?