Salve a tutti, sono nuovo del forum (dopo aver passato un po' di tempo a lurkare vergognosamente :rollo: ) e vorrei porvi questo quesito: sto tentando di realizzare un programma per cui mi serva l'allocazione dinamica di una matrice. Fino a qua nessun problema, infatti anche cercando su questo sito ho trovato indicazioni interessanti. Il problema è che pur avendo fatto tutto come già visto in esempi funzionanti, qualcosa non torna, vi posto il pezzo di codice che mi interessa:
(la variabile chiamata terminale la uso come globale)
codice:
void rialloca_array(int numerorighe, int numerocolonne, int lungh_stringa, char flag)
{
int i;
switch (flag) {
case TRUE:
for (i=0; i<numerocolonne; i++) {
terminale[i]=(char**)realloc(terminale[i], sizeof(char*)*numerorighe);
terminale[i][numerorighe-1]=(char*)malloc(sizeof(char));
} (*terminale)[numerorighe-1]=(char*)malloc(sizeof(char)*lungh_stringa);
break;
case FALSE:
terminale=(char***)realloc(terminale,sizeof(char**)*numerocolonne);
terminale[numerocolonne-1][0]=(char*)malloc(sizeof(char)*lungh_stringa);
break;
}
}
Ora non sto a scendere nel dettaglio, la parte TRUE funziona perfettamente, quella FALSE no!
infatti io pensavo che una volta riallocato terminale con sizeof(char**)*numerocolonne, se ad esempio numerocolonne vale 2, terminale dovrebbe puntarmi a un "array" di due celle (che contengono char**), e alla seconda ci si acceda con terminale[1]. Invece il problema è che terminale[1] è NULL e non posso accedervi!
Dove sta il problema?
Edit: Usando GDB ho notato che terminale[1] è 0x0, così come terminale[2], mentre terminale[3], terminale[4] e terminale[5] sono tre puntatori diversi da NULL, anche se io ho passato alla realloc sizeof(char**)*2
Secondo Edit: mi sono reso conto di essere un pirla
Probabilmente vi sto solo facendo perdere tempo, perchè è ovvio che non posso accedere a terminale[1] se non uso una malloc per allocarlo... l'unica cosa che ancora non mi spiego è perchè le celle di indice 3,4,5 risultino diverse da NULL :|