2012-04-04 3 views
2

i ont cette matriceComment écrire et lire un tableau char dynamique en trois dimensions dans un fichier?

char ***three_dim=0; 

three_dim est alloué et rempli avec des données. Après cela, je dois écrire son contenu dans un fichier et le relire. J'ai essayé ce qui suit pour l'écrire mais il échoue.

FILE *temp; 
temp=fopen("temp","w"); 
fwrite(three_dim,outer_dim*ROWS*COLUMNS,1,temp); 
fclose(temp); 

EDIT:

Voici comment il est attribué:

three_dim=new char**[outer_dim]; 
     for(int i=0;i<outer_dim;++i) 
      { 
       three_dim[i]=new char*[ROWS]; 
       for(int k=0;k<ROWS;++k) 
        three_dim[i][k]=new char[COLUMNS]; 
      } 
+1

Comment l'avez-vous alloué? Il échoue probablement parce qu'il n'est pas alloué de façon compacte, mais comme un "tableau de pointeurs vers des tableaux de pointeurs vers des tableaux". – Imp

+0

* Comment * échoue-t-il? Est-ce que ça plante? Est-ce qu'il n'écrit rien? Est-ce qu'il écrit des ordures? Deuxièmement, est-ce C ou C++? Vous utilisez des E/S de style C, mais une allocation de mémoire de style C++. Lequel est-ce? –

Répondre

3

Vous ne pouvez pas écrire dans le fichier par un seul fwrite(), parce que votre tableau n'est pas attribué en tant que zone compacte de outer_dim * ROWS * COLUMNS octets.

Comme vous l'avez affecté dans un cycle de production, vous devez également le sortir dans un cycle de production.

for (i = 0; i < outer_dim; i++) 
    for (j = 0; j < ROWS; j++) 
     fwrite(three_dim[i][j], COLUMNS, 1, temp); 
2

Comme d'autres l'ont dit, le problème le plus probable est que la mémoire n'a pas été allouée de manière contiguë.

Si votre Rows et Columns sont des constantes de compilation, vous pourriez faire quelque chose comme ce qui suit:

char (*three_dim)[ROWS][COLUMNS]; // declare three_dim as a pointer to a 
            // ROWSxCOLUMNS array of char 
... 
three_dim = malloc(sizeof *three_dim * outer_dim); 

Vous pouvez alors accéder three_dim comme un tableau 3-D:

three_dim[i][j][k] = something(); 

Cette va allouer les données de manière contiguë, et vous devriez être capable de l'écrire dans un seul appel fwrite comme

fwrite(three_dim, sizeof *three_dim * outer_dim, 1, temp); 

Sinon, la solution de imp est la bonne façon de procéder.

+0

Si je pouvais accepter deux réponses. J'aurais accepté le tien aussi. – John

Questions connexes