El acceso dinámico a la memoria solo funciona dentro de la función
Esta pregunta está destinada a ser utilizada como un duplicado canónico para estas preguntas frecuentes:
Estoy asignando datos dinámicamente dentro de una función y todo funciona bien, pero solo dentro de la función donde tiene lugar la asignación. Cuando intento usar los mismos datos fuera de la función, me cuelgo u otro comportamiento inesperado del programa.
Aquí hay unMCVE:
#include <stdlib.h>
#include <stdio.h>
void create_array (int* data, int size)
{
data = malloc(sizeof(*data) * size);
for(int i=0; i<size; i++)
{
data[i] = i;
}
print_array(data, size);
}
void print_array (int* data, int size)
{
for(int i=0; i<size; i++)
{
printf("%d ", data[i]);
}
printf("\n");
}
int main (void)
{
int* data;
const int size = 5;
create_array(data, size);
print_array(data, size); // crash here
free(data);
}
Cuandoprint_array
se llama desde adentrocreate_array
función, obtengo el resultado esperado0 1 2 3 4
, pero cuando lo llamo desdemain
, Me cuelga un programa.
¿Cuál es la razón para esto?