Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Saikilito en 20 Julio 2017, 06:02 am



Título: Problema con Matrices de memoria Dinamica
Publicado por: Saikilito en 20 Julio 2017, 06:02 am
Buenas :)

Antes que nada muchas gracias a todo el que se tome el tiempo de leer y/o intentar ayudarme.

Estoy haciendo un ejercicio bastante sencillo sobre crear Matrices con memorias dinámicas desde funciones, pero empezando el ejercicio me tope con un problema curioso!

Resulta que cuando intento devolver la dirección de memoria desde la función para asignárselo a las matrices el compilador me lanza un error diciendo que no puedo asignar con "="

Claro esto ya lo probé luego con el Dev-C++ porque el tutorial que estoy haciendo trabajan con ello y en efecto el programa corrio (igual marco los avisos pero corrio) la cosa es que yo no uso Dev-C porque me parece altamente permisivo y lo dicho con el minGW no me corre y de verdad no se como solucionarlo ya busque por la web y termine mas enredado que al inicio con el tema de los punteros, dicho esto aclaro que aun estoy bastante novato en esto de programar.

Sin mas que decir dejo el codigo para que lo examineis.

Código:

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

/*Crear un programa que compare si dos matrices son iguales y haga todo con funciones*/

int espacioM();

int **A,**B;
int i,j,k;
int filas,col;

int main( void ) {

printf("Introduce el numero de filas\n");
scanf("%i",&filas);
printf("Introduce el numero de columnas\n");
scanf("%i",&col);

/*-----------Aqui es donde esta el presunto error ------ */

        A = espacioM(filas,col);
B = espacioM(filas,col);

/*----------------------------------------------------------*/

printf("Que lo que menol\n");


getchar();
return 0; }

int espacioM (int filas, int col)
{
int **mtz;

mtz = (int**)malloc(filas*sizeof(int*));
if (mtz==NULL)
{
printf("EPA La memoria no se asigno!\n");
exit(1);
}
for (i = 0; i < filas; ++i)
{
mtz[i] = (int*)malloc(col*sizeof(int));
if (mtz[i]==NULL)
{
printf("EPA La memoria no se asigno!\n");
exit(1);
}
}

return **mtz;}




Aqui el copy/paste del error que deja el compilador

Código:

16-. Comparar Matrices D con funciones.c: In function 'main':
16-. Comparar Matrices D con funciones.c:19:4: error: assignment makes pointer from integer without a cast [-Wint-conversion]
  A = espacioM(filas,col);
    ^
16-. Comparar Matrices D con funciones.c:20:4: error: assignment makes pointer from integer without a cast [-Wint-conversion]
  B = espacioM(filas,col);
    ^
[Finished in 0.9s]


A todos gracias por su tiempo.






Título: Re: Problema con Matrices de memoria Dinamica
Publicado por: ivancea96 en 20 Julio 2017, 13:36 pm
El resumen es este:

Código
  1. int **A;
  2. A = espacioM();
  3.  
  4. int espacioM(){
  5.    int **mtz;
  6.    return **mtz;
  7. }

Aquí hay varios problemas.

Primero, A es un "int**", por tanto, no le puedes asignar el retorno de espacioM, que es un "int".
La solución en este caso, es hacer que espacioM retorne "int**", pues quieres que retorne la matriz.

Segundo problema, "return **mtz". mtz es un "int**", por tanto, basta poner "return mtz" para retornar lo que quieres. Después de la declaración de mtz, al escribir "*mtz", estás "quitando" un puntero, convirtiendo el "int**" a "int*". Si lo haces 2 veces, lo conviertes a "int".

En resumen, quieres que espacioM retorne "int**". Para ello, retorna directamente mtz.


Título: Re: Problema con Matrices de memoria Dinamica
Publicado por: Saikilito en 20 Julio 2017, 20:02 pm
 :o !!!

Listo ya pude arreglarlo, quedo perfecto!!

Muchisimas gracias  ;D