C/Visual C - ayuda con matrices y funciones

 
Vista:

ayuda con matrices y funciones

Publicado por andres (2 intervenciones) el 19/11/2009 18:28:15
llevo poco tiempo con C y me complica como devolver una matriz
por ejemplo tengo e lsig. codigo:

#include <stdio.h>
#include <stdlib.h>

int crea_matriz(){
int i, j;
int matriz[10][10]; // se crea una matriz y se rellena con unos
for(i=0; i<10; i++){
for(j=0; j<10; j++){
matriz[i][j]=0;
}
}
return matriz;
}

void ver(int ma[][10]){
int i, j;
for(i=0; i<10; i++){
for(j=0; j<10; j++) printf("posicion %d, %d: %d\n", i, j, ma[i][j]);
}
}

int main(){
int ma[10][10];
ma[10][10]=crea_matriz();
ver(ma);
return 0;
}

al compilar me mustra los sug. warning en la fucnion crea_matriz
warning: function returns address of local variable
warning: return makes integer from pointer without a cast
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ayuda con matrices y funciones

Publicado por Capitan Kirk (97 intervenciones) el 19/11/2009 18:51:22
En primer lugar, en la función crea_matriz(), estás dando matriz como valor de retorno. Esta variable es una variable local a la función, por lo que desaparecerá al finalizar la función. De ahí el primer warning.

En segundo lugar, en C el nombre de una matriz (simplemente el nombre) es un puntero al primer elemento de la matriz. De ahí el segundo warning: Tal como has declarado matriz, este nombre sería equivalente a int** (puntero a puntero), es decir, estás intentando emplear un int** como valor de retorno de una función que debe retornar un int. Podrías utilizar un cast para forzar el tipo de retorno, es decir, poner return (int)matriz, pero sería muy peligroso: Podrías utilizarlo a la vuelta de la función haciendo otro cast, algo así como
mi_matriz = (int **)crea_matriz();
pero entonces debes tener en cuenta que estarías intentando utilizar un espacio de almacenamiento q
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con matrices y funciones

Publicado por Capitan Kirk (97 intervenciones) el 19/11/2009 18:51:22
En primer lugar, en la función crea_matriz(), estás dando matriz como valor de retorno. Esta variable es una variable local a la función, por lo que desaparecerá al finalizar la función. De ahí el primer warning.

En segundo lugar, en C el nombre de una matriz (simplemente el nombre) es un puntero al primer elemento de la matriz. De ahí el segundo warning: Tal como has declarado matriz, este nombre sería equivalente a int** (puntero a puntero), es decir, estás intentando emplear un int** como valor de retorno de una función que debe retornar un int. Podrías utilizar un cast para forzar el tipo de retorno, es decir, poner return (int)matriz, pero sería muy peligroso: Podrías utilizarlo a la vuelta de la función haciendo otro cast, algo así como
mi_matriz = (int **)crea_matriz();
pero entonces debes tener en cuenta que estarías intentando utilizar un espacio de almacenamiento q
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con matrices y funciones

Publicado por Capitan Kirk (97 intervenciones) el 19/11/2009 18:51:22
En primer lugar, en la función crea_matriz(), estás dando matriz como valor de retorno. Esta variable es una variable local a la función, por lo que desaparecerá al finalizar la función. De ahí el primer warning.

En segundo lugar, en C el nombre de una matriz (simplemente el nombre) es un puntero al primer elemento de la matriz. De ahí el segundo warning: Tal como has declarado matriz, este nombre sería equivalente a int** (puntero a puntero), es decir, estás intentando emplear un int** como valor de retorno de una función que debe retornar un int. Podrías utilizar un cast para forzar el tipo de retorno, es decir, poner return (int)matriz, pero sería muy peligroso: Podrías utilizarlo a la vuelta de la función haciendo otro cast, algo así como
mi_matriz = (int **)crea_matriz();
pero entonces debes tener en cuenta que estarías intentando utilizar un espacio de almacenamiento q
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ayuda con matrices y funciones

Publicado por Capitan Kirk (97 intervenciones) el 19/11/2009 21:31:13
En primer lugar, en la función crea_matriz(), estás dando matriz como valor de retorno. Esta variable es una variable local a la función, por lo que desaparecerá al finalizar la función. De ahí el primer warning.

En segundo lugar, en C el nombre de una matriz (simplemente el nombre) es un puntero al primer elemento de la matriz. De ahí el segundo warning: Tal como has declarado matriz, este nombre sería equivalente a int** (puntero a puntero), es decir, estás intentando emplear un int** como valor de retorno de una función que debe retornar un int. Podrías utilizar un cast para forzar el tipo de retorno, es decir, poner return (int)matriz, pero sería muy peligroso: Podrías utilizarlo a la vuelta de la función haciendo otro cast, algo así como
mi_matriz = (int **)crea_matriz();
pero entonces debes tener en cuenta que estarías intentando utilizar un espacio de almacenamiento que ya no existe. En programas cortos puede que, aparentemente, no dé problemas, pero lo normal es que sí, y graves.

Para lo que quieres hacer deberás emplear punteros y asignación dinámica de memoria, pero esto requiere un buen conocimiento del manejo de los punteros y de las funciones de asignación de memoria.

Disculpa los posts a medio terminar que se han colado, la máquina me hizo algo raro y me lo mandó antes de terminar el mensaje.

Saludos,
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar