Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [C] Allocazione dinamica matrice

    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 :|

  2. #2

    Re: [C] Allocazione dinamica matrice

    Originariamente inviato da bznein
    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 :|
    La malloc e la realloc ti forniscono memoria non necessariamente inizializzata a 0, sarà memoria già utilizzata in precedenza.
    Amaro C++, il gusto pieno dell'undefined behavior.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.