Этот вопрос предназначен для использования в качестве канонического дубликата для этого FAQ:
Я динамически распределяю данные внутри функции, и все работает хорошо, но только внутри функции, в которой происходит распределение. Когда я пытаюсь использовать те же данные вне функции, я получаю сбои или другое неожиданное поведение программы.
Вот MCVE:
#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);
}
 Всякий раз, когда print_array вызывается из функции create_array, я получаю ожидаемый результат 0 1 2 3 4, но когда я вызываю его из main, я получаю сбой программы.
Что является причиной этого?
