Эти две строки немного проблематичны:
aryPtr[inc] = malloc(sizeof(myNode));
aryPtr[inc] = &(myList[z]);
Первое назначение
aryPtr[inc] = malloc(sizeof(myNode));
выделяет память и заставляет aryPtr[inc]
указывать на эту память.Но следующее присваивание
aryPtr[inc] = &(myList[z]);
отбрасывает результат вызова malloc
и переназначает aryPtr[inc]
, чтобы указать куда-то еще.Это приводит к утечке памяти.
Это похоже на простую переменную int и присвоение ее несколько раз:
int a;
a = 5;
a = 10;
А потом удивляетесь, почему a
не равен 5
.
Чтобы решить эту проблему, либо отбросьте первое присвоение с помощью malloc
и получите только
aryPtr[inc] = &myList[z]; // Make aryPtr[inc] point to myList[z]
или разыменуйте указатель назначения, чтобы скопировать структуру:
aryPtr[inc] = malloc(sizeof(myNode));
*aryPtr[inc] = myList[z]; // Copy the structure itself
Другая пара вещей:
С кодом, который вы показываете (вам действительно нужно предоставить Минимальный, Полный и Проверяемый пример ), он выглядит как вы 'всегда используйте индекс 0
для aryPtr
и myList
.Вы также используете один и тот же индекс как для aryPtr
, так и для myList
, поэтому для этого вам нужна только одна переменная.