我目前正在C中实施双向链表。该列表的目的是尽可能通用。这是节点struct:
typedef struct list_node
{
struct list_node *prev;
struct list_node *next;
int nodeId;
} Node;
现在,我将其扩展到以下节点:
typedef struct history_node
{
Node *node;
String *cmd;
} HistoryNode;
字符串结构定义如下:
typedef struct c_string
{
char *array;
size_t size;
} String;
现在,我遇到的问题是:我创建了一个新的历史节点,并将它的字符串设置为一个值,"你好"例如。然后我调用我的pushBack函数,定义如下:
void pushBack(Node *node, List *list)
{
node->next = list->tail;
node->prev = list->tail->prev;
list->tail->prev->next = node;
list->tail->prev = node;
list->size++;
}
这里的事情是,当我分配node->next
时,我不是访问历史节点的node
部分,而是访问字符串,这会导致灾难。我不知道为什么会这样。查看内存中的地址,传入的指针具有正确的地址,但node->next
中访问的地址对应cmd
而不是node
的地址。有什么想法吗?
以防万一,调用此函数的代码是:
HistoryNode *node = createHistoryNode(buffer);
pushBack((Node*)node, historyList);
我已经确认createHistoryNode
按预期工作,因此这不是问题的根源。
答案 0 :(得分:0)
你不想要
typedef struct history_node {
Node *node;
String *cmd;
} HistoryNode;
你想要
typedef struct history_node {
Node node;
String *cmd;
} HistoryNode;