Проблема заключается в следующем:
node newNode = (node) malloc(sizeof(node));
Если вы не хотите изменять что-либо еще, вы можете исправить это следующим образом:
node newNode = (node) malloc(sizeof(*node));
Однако есть нескольковещи, которые я хотел бы рассмотреть в вашем коде.Во-первых, не приводите malloc
, так как это совершенно не нужно, если только по какой-то причине вы не используете компилятор C ++.
Во-вторых, гораздо лучше вместо переменной типа указывать тип malloc
, потому что это позволяет избежать дублирования кода.В этом случае это также решило бы вашу ошибку.С этими двумя вещами вы могли бы написать так:
node newNode = malloc(sizeof(*newNode));
В-третьих, совершенно нет причин использовать разные имена для node_structure
и node
.Вместо этого напишите так:
typedef struct node {
int data;
struct node *prev;
struct node *next;
} *node;
В-четвертых, вы можете использовать typedefs, чтобы скрыть структуры и указатели со спуском (некоторые люди спорят о скрытии указателей таким образом), когда вы создаете интерфейс к библиотеке, но делаетене использовать их в коде, фактически манипулируя ими.Ваше создание должно выглядеть следующим образом:
struct node *createNode(int value) {
struct node *newNode = malloc(sizeof(*newNode));
// Same as before in the rest
Что особенно странно, так это то, что тот же код работает без проблем в других операционных системах
Это не странно.Это почти 100% верный признак того, что ваш код имеет неопределенное поведение .