Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813

    distruzione matrice dinamica

    ciao a tutti
    ho creo e distruggo una matrice nel seguente modo

    codice:
    void ** creaMatrice(int n,int size)
    
    {
    
    	int i;
    
    	//alloco n celle di ognuna di 'size0 byte
    
        void ** m = (void**)calloc(n,size);
    
        //per ogni elemento, alloco un vettore sempre di n locazioni
    
        for(i=0;i<n;i++)
    
        {
    
          m[i] = calloc(n,sizeof(byte));
    
        }
    
        
    
        return m;
    
    }
    
    
    
    void distrugiMatrice(void **m,int n)
    
    {
    
    	int i;
    
    	for(i=0;i<n;i++)
    
        {
    
          free(m[i]);
    
        }
    
        free(m);
    
    }
    perché l'istruzione free(m[i]); della funzione distrugiMatrice mi fa spuntare un backtrace interminabile, dicendomi qualcosa come "double free o corruption"?
    dove sbaglio?

    ps: uso linux e gcc
    Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Ma che matrice e' ?

    n x n elementi di un numero di byte indicato da size ?

    E' una matrice di stringhe di caratteri ?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813
    ecco....quello è un errore...

    ecco la nuova funziome, ma il problema non si risolve:

    codice:
    void ** creaMatrice(int n,int size)
    {
    	int i;
        //alloco n celle di ognuna di 'size0 byte
        void ** m = (void**)calloc(n,size);
        //per ogni elemento, alloco un vettore sempre di n locazioni
        for(i=0;i<n;i++)
        {
          m[i] = calloc(n,size);
        }
        return m;
    }
    Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    Non hai risposto alla mia domanda, il dubbio mi e' rimasto e dobbiamo impiegare un altro post e altro tempo ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Feb 2008
    Messaggi
    813
    no...
    è una matrice N*N passato come parametro della funzione e che ogni cella della matrice è grande 'size' byte...

    così posso creare una matrice di interi, char, float, etc...
    Nell'anno 1968 è bastata la potenza di due Commodore 64 per lanciare con successo una navicella sulla Luna; nell'anno 2007 ci vogliono la potenza di un processore quad core 3.30 GHz e 3 Gb di RAM (requisiti minimi ufficiali) per utilizzare Windows Vista. Qualcosa deve essere andato storto!

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 © 2024 vBulletin Solutions, Inc. All rights reserved.