que tienen algo de código en un par de diferentes funciones que se ve algo como esto:¿Cómo puedo asignar memoria y devolverla (a través de un puntero-parámetro) a la función de llamada?
void someFunction (int *data) {
data = (int *) malloc (sizeof (data));
}
void useData (int *data) {
printf ("%p", data);
}
int main() {
int *data = NULL;
someFunction (data);
useData (data);
return 0;
}
someFunction()
y useData()
se definen en módulos independientes (archivos * .c).
El problema es que, aunque malloc funciona bien, y la memoria asignada se puede usar en someFunction
, la misma memoria no está disponible una vez que la función ha regresado.
Se puede ver una ejecución de ejemplo del programa here, con salida que muestra las distintas direcciones de memoria.
¿Puede alguien explicarme por favor lo que estoy haciendo mal aquí, y cómo puedo conseguir que este código funcione?
EDIT: Por lo que parece que tengo que utilizar punteros dobles de hacer esto - ¿cómo voy a ir haciendo la misma cosa cuando realmente se necesita para el uso punteros dobles? Por ejemplo, los datos son
int **data = NULL; //used for 2D array
¿Necesito utilizar punteros triples en las llamadas a funciones?
Sí, se necesitaría triples punteros luego – vpram86