Programación General > C/C++

 Malloc A Variable Global Desde Funcion? Como?

(1/2) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa