Node ret[2] = (struct Node*)malloc(2*sizeof(Node));
, вероятно, должно быть:
Node *ret = malloc(2 * sizeof(*ret));
Это потому, что вам нужен указатель на память, а не массив. В случае массива это инициализация, для которой потребуется ограниченный список инициализации. Обратите внимание, что это обеспечивает память только для указателей, , а не для того, на что они указывают - их нужно выделять отдельно, если вы будете sh использовать их.
Вы, вероятно, заметите также два других изменения:
Я удалил приведение к возвращаемому значению malloc
. Это не имеет смысла в C, поскольку возвращаемый void*
может быть неявно приведен к другим типам указателей. Фактически, существуют ситуации, когда явное приведение может привести к незначительным проблемам.
Я использовал *ret
в качестве переменной, чтобы получить размер, а не тип. Это просто моя привычка, поэтому, если я изменяю тип (например) tNode
, мне нужно изменить его только в одном месте в этой строке - да, я в основном ленив :-) Обратите внимание, что это просто предпочтение, выполнение оригинального способа не оказывает вредного влияния на саму программу, только сопровождение разработчика.