我目前正在尝试使用双向链表对一些数据进行排序。我在使用给定数据创建新节点时遇到问题。下面是给我的代码:
#ifndef LIST_H_
#define List_H_
#define MAX_SYMBOL_LENGTH 7
struct order {
int id;
char symbol[MAX_SYMBOL_LENGTH];
char side;
int quantity;
double price;
};
typedef struct order* OrderPtr;
typedef struct onode* NodePtr;
struct onode {
OrderPtr data;
NodePtr next;
NodePtr prev;
};
这是我使用 list.h 作为标头编写的代码。以下是似乎不断崩溃的代码:
#include "list.h"
NodePtr newNode(OrderPtr data){
NodePtr node = (NodePtr)malloc(sizeof(NodePtr));
//node->data = (NodePtr)malloc(sizeof(OrderPtr));
//*node->data = *data;
node->data = data;//This is the one I am having problems with
node->next = NULL;
node->prev = NULL;
return node;
}
它编译得很好,但是当我尝试将其提交给在线评分器时,它说它不起作用。这是我的思考过程,
- 为 NodePtr 创建内存。
- 为 NodePtr->data 创建内存。
然后将从函数传递的数据值分配给节点> Ptr 中的值。但是我不知道如何为 NodePtr-> 数据分配内存。
NodePtr node = (NodePtr)malloc(sizeof(NodePtr));
没有按照你的想法做。它分配空间以容纳与 sizeof(int*
相同的指针,通常在 32 位机器上为 4
字节。
你需要做NodePtr node = malloc(sizeof(struct onode));
而不是。 data
成员应产生malloc(sizeof(struct order));
此外,不要从malloc()
调用强制转换结果值。
NodePtr
是指向节点的指针,而不是节点本身。 您只为指针分配了足够的内存,而不是 onode 结构的所有成员。 您需要用 sizeof(struct onode)
拨打malloc
。