Потому что это не массив:
unsigned int* myArr; //The array
... это указатель.Указатель и массив совершенно разные вещи.В некоторых случаях массивы могут быть разложены на указатели, но они по-прежнему не одно и то же.
Это массив:
unsigned int temp[4];
... и он падает со стекав конце функции.
Когда вы делаете это:
myArr = temp;
... вы не копируете содержимое массива, вы просто копируете адресПервый элемент массива.Когда функция, в которой выделено temp
, завершается, сам массив падает со стека, и myArr
становится диким указателем, указывающим на неинициализированную память.