Вы просто изменяете локальную копию функции массива, потому что это один указатель.Чтобы вернуть его за пределы массива, вы можете передать Sa **ar
, а затем взять адрес указателя, который вы передаете в функцию, и затем в вашей функции, где бы у вас не было ar
, изменить его на *ar
.
Вы также можете передать что-то вроде Sa **array
и затем назначить локальную переменную, если хотите избежать изменения кода, поэтому
Sa *ar = *array;
тогда вы все равно можете использовать
ar = (Sa*) malloc(sizeof(Shlasha));
затем в конце функции перед возвратом выполните:
*array = ar;