Programación General > C/C++
Malloc A Variable Global Desde Funcion? Como?
Penny:
Hola,
tengo una variable global, un puntero a caracter char *vector, y necesito una función que, pasándole 2 números enteros n1 y n2, me reserve memoria dinámica para un vector de n1xn2 caracteres en la variable *vector.
Cómo lo hago?? Sólo he conseguido errores de acceso a memoria ...
Gracias por adelantado.
Ruben3d:
Hola
Para reservar memoria para una matriz y asignarla a una variable de tipo char* (en vez de char** que sería lo de esperar) has de hacerlo así:
--- Código: Text --- vector = (char*) malloc(n1*n2*sizeof(char)); Una vez reservada la memoria, el acceso a una posición x,y de la matriz sería:
--- Código: Text --- valor = vector[y*n1+x];
Funcionará siempre y cuando n1 sea la anchura, n2 la altura, x se refiera a posición horizontal e y a la posición vertical. El rango para x será [0,n1-1] y el rango de y [0,n2-1].
Espero que te sirva de ayuda.
Un saludo.
Ruben3d
Penny:
ante todo, gracias por contestar.
Realmente, mi problema no es cómo asignar la memoria dinámica, sino cómo crear una función que lo haga. Sólo supongo que debo pasarle como argumento *vector, n1, n2.... pero no sé si debe ser del tipo void, o debe retornar algo...
Ruben3d:
Si dices que vector es una variable global no hace falta pasarla como parámetro. La función podría ser así:
--- Código: Text --- void ReservarMemoriaGlobal(int n1, int n2){ vector = (char*) malloc(n1*n2*sizeof(char));}
En caso de que no quisieras la variable global, sino local, habrías de hacerlo así:
--- Código: Text --- void ReservarMemoriaLocal(char **vector, int n1, int n2){ *vector = (char*) malloc(n1*n2*sizeof(char));}
y se llamaría a la función así:
--- Código: Text --- ReservarMemoriaLocal(&vector, n1, n2);
Espero que te sirva.
Un saludo.
Ruben3d
Penny:
como tu dices:
--- Código: Text ---void ReservarMemoriaGlobal(int , int ); void ReservarMemoriaGlobal(int n1, int n2){ vector = (char*) malloc(n1*n2*sizeof(char));} void main(){char *vector;int x=4,y=4; printf("\n\nStart\n");ReservarMemoriaGlobal(x,y);printf("\n\nEnd");}
estos son los resultados:
error: 'vector' undeclared identifier
error: '=' cannot convert from 'char *' to 'int' This Conversion requires a reinterpret_cast, a C-style cast or a function-style cast
que hay mal??
Navegación
[#] Página Siguiente
Ir a la versión completa