我目前正在C中實現一個雙向鏈表。該列表的目的是儘可能通用。這裏的節點結構:具有多態結構的錯誤內存偏移量
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;
現在,我遇到的問題是這樣的:我創建一個新的歷史節點,並將它的字符串設置爲一個值,例如「hello」。然後,我呼籲我推回功能,即定義如下:
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
作品如預期,所以這不是問題的根源。
'節點*節點;'你想從這裏取出的明星,並相應地修改節點創建。 –
@nmm。謝謝!這解決了問題 – Mauricio