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

    [C] chiarimenti allocazione dinamica memoria

    Salve a tutti.
    Mi sto avvicinando adesso alla programmazione C e sto cercando di comprenderne le basi.
    La mia domanda è forse un po' "stupida" ma vorrei capire meglio l'allocazione dinamica della memoria.
    Ho scritto questo semplice programma usando malloc() per creare un array bidimensionale di double:

    codice:
    #define oops(s) { perror((s)); exit(EXIT_FAILURE); }
    #define MALLOC(s,t) if( ((s) = malloc(t)) == NULL) { oops("error malloc(): "); }
    #define INCREMENT 10
    
    /* Tutorial 3
        * dynamic memory allocation
    */
    
    int main (int argc, const char * argv[]) {
            double **xyz;
    	int j;
    	MALLOC(xyz, sizeof(double *) * INCREMENT);
    	for(j=0; j < INCREMENT; j++) {
    		MALLOC(xyz[j], sizeof(double) * 3);
    	}
            xyz[0][0] = 0;
    	xyz[0][1] = 1;
           /* .... */
    }
    Se non ho capito male ho creato così un array di 10 posizioni, ogni posizione contiene un puntatore a un array di tre elementi.
    A questo punto se provassi ad assegnare xyz[0][4] = 4 dovrebbe darmi errore o non fare l'assegnazione o sbaglio (cosa che non fa)? In caso contrario allora l'allocazione di memoria a cosa serve esattamente?
    grazie

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,472
    In C non c'è alcun controllo su "dove" vai a scrivere.

    Puoi scrivere "fuori" dalla memoria allocata e quindi in una zona di memoria che non è "sicura".
    Può succedere che "sporchi" altre variabili del programma, può avvenire un crash ... non si può dire.

    L'allocazione *garantisce* che la memoria in cui scrivi sia dedicata al tuo programma.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    bene, grazie. hai chiarito il mio dubbio

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.