Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    34

    [C] Creazione di un array a più dimensioni

    Ciao a tutti,
    ho la necessità di creare un certo numero m di vettori composti da un numero k di elementi cisacuno.
    Il problema è che tutto ciò lo devo fare dinamicamente, non sapendo a priori quanto vale il numero m (k dipende da m).
    Ora io ho sempre dichiarato le matrici così:

    codice:
    mat=(int*)malloc(n*m*sizeof(int)) ;
    tuttavia mi serve mantenere la proprietà di "vettore di vettori", in modo da liberarmi di un indice, e se ho ben capito mi serve un puntatore che punta a un array di array, ma non ho mai fatto una cosa del genere.
    come si alloca e si inizializza un tale array?
    non riesco a trovare la sintassi giusta per allocare l'array con un doppio puntatore, il compilatore mi dà segmentation fault, e mi sa che scrivo cavolate.
    Dovrei anche inizializzarlo e vorrei farlo contestualmente all'allocazione. Cosa mi suggerite??

    Grazie a tutti per l'aiuto.

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Usa un puntatore doppio per allocare un vettore di n puntatori singoli.

    Usa i puntatori singoli per allocare gli m elementi per puntatore.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    34
    si, ma non so la sintassi per allocare gli n puntatori e quella per allocare gli m elementi dei singoli puntatori
    suppongo sia una cosa fatta con un ciclo, ed è quello che ho fatto, ma il compilatore mi dice che c'è "segmentation fault"
    e che io sappia non è una cosa bella,
    non è che potresti scrivermi il codice per l' allocazione?

    Grazie ancora per l'aiuto

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da davide84
    non è che potresti scrivermi il codice per l' allocazione?
    Perche' non provi a rifletterci un altro po' e tenti di risolvere da solo?

    Alloca con una malloc n puntatori ad interi assegnando il risultato ad un puntatore doppio ad intero (e' una sola riga, non difficile da scrivere ... )

    Utilizza un ciclo for per allocare (con una malloc) utilizzando gli elementi del vettore allocato sopra (anche questo non e' difficile ... almeno tentaci ...)
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    34
    quindi tu mi stai dicendo di fare così:

    codice:
    a=(int **)malloc((m)*sizeof(int*));         // allocazione del puntatore doppio
    codice:
    for(i=0;i<m;i++)
    		{
    			a[i]=( int *)malloc(n*sizeof( int));     //allocazione dei singoli array
    		}
    giusto?
    Se si lo avevo già fatto, ma pensavo che, dato l'errore di segmentation fault, avessi sbagliato qualcosa, nel qual caso non capisco quale possa essere il problema.

    Se no, puoi indicarmi dove ho sbagliato, per favore??

    Grazie ancora

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Dando per scontato che a e' un doppio puntatore ad int, ovvero

    int **a;

    il codice e' corretto ...

    Il segmentation fault non e' causato da questo codice, ma da altro ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    34
    si, a è dichiarato come hai scritto tu,
    ma sai a che cosa può essere dovuto?

  8. #8
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Originariamente inviato da davide84
    ma sai a che cosa può essere dovuto?
    Come faccio se non conosco il resto del codice?
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  9. #9
    Utente di HTML.it
    Registrato dal
    Jun 2008
    Messaggi
    34
    non c'è praticamente nient'altro, solo la free che ho fatto in questo modo:

    codice:
    for(i=0;i<m;i++)
    	{
    		free(a[i]);
    	}	
    	free(a);

  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non dovresti avere alcun problema.

    Naturalmente dovresti controllare che le malloc vadano a buon fine (che non restituiscano null, altrimenti vuol dire che la memoria non puo' essere allocato), ma questo non dovrebbe accadere per piccole matrici.

    Se tenti di allocare matrici molto grandi, invece, e' possibile che accada che le malloc restituiscano dei puntatori null che, in seguito, da' problemi nelle free ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

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.