Проблема в том, что вы делаете unsigned int *arr = cnt->arr
, который объявляет беззнаковый указатель int и указывает на cnt-> arr.После того, как вы измените массив, вы затем попытаетесь переустановить массив - но, переназначив указатели, вы не изменили содержимое массива;Вы только изменили указатели .Таким образом, ваша строка cnt->arr = arr
фактически ничего не меняет.Затем «unsigned int * arr» выходит из области видимости, и, таким образом, указатель уничтожается, оставляя вас с невосстановимыми данными.
Вместо этого вам нужно будет скопировать массив во временное пространство и выполнить с ним операциивместо массива, а затем скопируйте его обратно, ИЛИ (более простой метод) просто используйте указатель arr
и не , затем попробуйте cnt->arr = arr
- этот эффект все равно будет достигнут