myArray
- локальная переменная, и, таким образом, указатель действителен только до конца своей области видимости (которая в данном случае содержит содержащую функцию getArray
).Если вы обратитесь к нему позже, вы получите неопределенное поведение.
На практике происходит то, что вызов printf
перезаписывает часть стека, используемую myArray
, и затем содержит некоторые другие данные.
Чтобы исправить ваш код, вам нужно либо объявить массив в области, которая живет достаточно долго (функция main
в вашем примере), либо разместить его в куче.Если вы размещаете его в куче, вам нужно освободить его либо вручную, либо в C ++, используя RAII.
Одна из пропущенных мной альтернатив (возможно, даже лучшая здесь, при условии, что массив не слишком большой) заключается в переносеВаш массив в структуру и, следовательно, сделать его типом значения.Затем при возврате создается копия, которая сохраняется после возврата из функции.См. tp1 's ответ для подробностей об этом.