[C con Clase] Duda con Matriz

Davidson, Steven srd4121 en njit.edu
Mar Feb 19 17:29:04 CET 2013


Hola Fernando,

2013/2/18 Fernando Acua <facua en hotmail.com>

>
>
>
[CORTE]

Finalmente gracias a sus consejos el programa quedó así, aunq falta incluir
> la comprobación de memoria cuando se usa malloc:
>
>
Me he dado cuenta que hay un error en tu código.

    // reservar 3 bytes p cada elemento
>     for(f=0; f<FIL; f++) for(c=0; c<COL; c++)
> pcMatriz[f][c]=(char*)malloc(3*sizeof(char));
>
>     // copiar "abc" a cada elem
>     for(f=0; f<FIL; f++) for(c=0; c<COL; c++) strcpy(pcMatriz[f][c],"abc");
>
>
Aquí estás copiando 4 caracteres (de "abc") a un array que contiene 3
elementos. Recuerda que las cadenas de caracteres se auto-terminan
agregando el carácter nulo al final de la información. Por lo tanto, debes
crear arrays dinámicos de 4 caracteres, para poder guardar el carácter
nulo. Esto es,

/* 4 char = 3 caracteres + carácter nulo */
for(f=0; f<FIL; f++) for(c=0; c<COL; c++) pcMatriz[f][c]=(char*)malloc( 4 );

    // impresion de matriz
>     for(f=0; f<FIL; f++)
>     {
>         for(c=0; c<COL; c++) printf("%i.%i=%s  ",f,c,pcMatriz[f][c]);
>         printf("\n");
>     }
>
>     // liberacion de recursos:
>     for(f=0; f<FIL; f++) for(c=0; c<COL; c++) free( *(*(pcMatriz+f)+c) );
>     for(f=0; f<FIL; f++) free( *(pcMatriz+f) );
>

No es necesario usar la forma aritmética para tratar los punteros. Creo que
es más legible usar el operador []. Esto es,

for(f=0; f<FIL; f++) for(c=0; c<COL; c++) free( pcMatriz[f][c] );
for(f=0; f<FIL; f++) free( pcMatriz[f] );

    free(pcMatriz);
>
>     return(0);
> }
>


Espero que esto te ayude.

Steven
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20130219/30e045fc/attachment.html>


Más información sobre la lista de distribución Cconclase