Allocazione dinamica matrice

di il
5 risposte

Allocazione dinamica matrice

Ragazzi vorrei fare l'allocazione dinamica di una matrice di dimensioni (limite+1)*(limite+1)*(limite+1)*(n+1) ed ho usato il codice:
float **** K;
   
	K=(float ****) calloc (limite+1, sizeof (float ***));
	
	for (i = 0; i < limite+1; i++)
	    K[i]=(float ***) calloc (limite+1, sizeof (float **));
	    
      for (i = 0; i < limite+1; i++)
	    for (ii = 0; ii < limite+1; ii++)
	        K[i][ii]=(float **) calloc (limite+1, sizeof (float*));
      for (i = 0; i < limite+1; i++)
	    for (ii = 0; ii < limite+1; ii++)
            for (iii = 0; iii < limite+1; iii++)
            K[i][ii][iii]=(float *) calloc (n+1, sizeof(float));
	
Ma non la riesco da allocare. Qual è l'errore?
Grazie a chi mi darà una mano.

5 Risposte

  • Re: Allocazione dinamica matrice

    In che senso non ti riesce?

    Quanto valgono effettivamente quei valori?
  • Re: Allocazione dinamica matrice

    Intanto, quello che stai definendo NON E' UNA MATRICE ma casomai UN TENSORE di rango 4, se e' quello che vuoi fare.

    Una matrice e' un tensore di rango 2.

    Poi, se limite vale L ed n vale N, stai allocando qualcosa come

    L*L*L*N*4

    bytes (ho lasciato perdere i +1, per ora).

    Sei sicuro che hai abbastanza memoria?

    Inoltre, serve sapere l'errore che il programma genera.
    Il non mi funziona senza ulteriori informazioni serve come il parrucchino sulla testa del 6 .

    Anche il codice e' pasticciato: ci dovrebbero essere solo tre (3) cicli for!
    Quattro (4) se prevedi anche l'inizializzazione degli elementi del tensore.
  • Re: Allocazione dinamica matrice

    Ah ecco.
    Ho provato con un set di dati più piccolo del precedente, e gira.
    L'errore non è in fase di compilazione ma in fase di esecuzione: semplicemente mi dice che il file .exe ha smesso di funzionare.
    Plausibile a questo punto che sia un problema di memoria, immagino.
  • Re: Allocazione dinamica matrice

    P.S. Sto lavorando su un pc da 64 Giga di ram(!) ma
    N=50
    Limite = 600 circa
  • Re: Allocazione dinamica matrice

    Tenti di allocare 43 G di RAM ... e non pensare di poter allocare tanta memoria soprattutto se il processo è a 32 bit
Devi accedere o registrarti per scrivere nel forum
5 risposte