Allocazione dinamica matrice

di Anonimizzato14560 il
5 risposte
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

  • In che senso non ti riesce?

    Quanto valgono effettivamente quei valori?
  • 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.
  • 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.
  • P.S. Sto lavorando su un pc da 64 Giga di ram(!) ma
    N=50
    Limite = 600 circa
  • 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