0

我目前正在尝试使用双向链表对一些数据进行排序。我在使用给定数据创建新节点时遇到问题。以下是给我的代码:

#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;
}

它编译得很好,但是当我尝试将其提交给在线评分者时,它说它不起作用。这是我的思考过程,

  1. 为 NodePtr 创建内存。
  2. 为 NodePtr->data 创建内存。

然后将函数传递过来的数据的值赋给Node->Ptr中的值。但是我不知道如何为 NodePtr->data 分配内存。

4

2 回答 2

2
NodePtr node = (NodePtr)malloc(sizeof(NodePtr));

不是按照你的想法去做。它分配空间来保存与)相同的指针,通常是 32 位机器上的字节。sizeof(int*4

你需要做NodePtr node = malloc(sizeof(struct onode));而不是。 data成员应该是结果malloc(sizeof(struct order));

另外,不要从malloc()call中转换结果值。

于 2013-10-18T23:06:06.827 回答
1

NodePtr是指向节点的指针,而不是节点本身。您只是为指针分配了足够的内存,而不是为 onode 结构的所有成员分配了足够的内存。你会想用malloc打电话sizeof(struct onode)

于 2013-10-18T23:01:23.283 回答