【发布时间】:2013-10-18 22:48:42
【问题描述】:
我目前正在尝试使用双向链表对一些数据进行排序。我在使用给定数据创建新节点时遇到问题。以下是给我的代码:
#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 创建内存。
然后将函数传递过来的数据的值赋给Node->Ptr中的值。 但是我不知道如何为NodePtr->data分配内存。
【问题讨论】:
-
让我试试,哈哈,我是这个网站的新手。
-
您不需要在 C 程序中强制转换
malloc的返回值。 -
另外,当引用内联代码时,用反引号括起来会很有帮助,所以`code`会显示为
code。 -
当我说 typedef-ing 指针类型只有一个积极属性时,你只需要相信我:它避免了不正确的声明。
NodePtr a,b与Node* a,b;。除此之外,没有真正的好处,而且您会发现大多数专业 C/C++ 程序员希望在代码中看到这些星号,而不是将它们隐藏在不需要的 typedef 中,如果没有别的原因的话作为一面巨大的旗帜,上面写着“看!指针!”除非您正在编写一个将指针隐藏为“句柄”的抽象句柄类型系统,否则不要养成习惯。
标签: c linked-list nodes allocation