c - 为节点指针分配空间

标签 c linked-list nodes allocation

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

#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 作为 header 编写的代码。 这是看似不断崩溃的代码:

#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 分配内存。

最佳答案

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

没有按您的想法行事。它分配空间来容纳一个与sizeof(int*)相同的指针,通常在32位机器上是4字节。

您需要执行 NodePtr node = malloc(sizeof(struct onnode)); 而不是。 data 成员应该是 malloc(sizeof(struct order));

的结果

此外,don't cast result value from a malloc() call .

关于c - 为节点指针分配空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19460202/

相关文章:

c - 在 Lex 的输入文件中插入文本(使用 C)

c - Windows C 套接字关闭并重新连接

c++ - 反转链表,为什么 head 不应该指向原来的第一个元素?

C: 无法显示链表值

java - 确定对象的类型

java - 如何遍历二叉树

c - fcntl() 关于进程id的问题

c++ - 在 Arm 板上编译的 makefile 编译错误

java - 数组/链表 : performance depends on the *direction* of traversal?

python - 消除嵌套for循环处理的数据中的重复值(节点)