[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