2017-03-20 66 views
0

讓我來描述我的問題。我想創建一個包含多個項目的列表。我使用的是結構是這樣的:如何在不刪除內存內容的情況下重新初始化指向結構的指針? (在C)

typedef struct Node{ 
        char *element; 
        node *next; 
        node *prev; 
}node; 

現在,在我的節目,我初始化指針指向這樣一個結構的指針:

temp = (node*)malloc(sizeof(node)); 
temp->element = (char*)malloc(sizeof(char)*maximum); 
temp = InitElement(temp, maximum); 

起初,我給我的程序是:

maximum = 10; 

到目前爲止沒有問題。但我的問題現在開始: 編輯/感嘆。我會盡量簡化:

我正在製作一個表示中綴表達式操作數的元素列表。

我正在使用我的列表作爲堆棧。

每次我的程序在用戶的初始輸入中檢測到一個操作數時,它會彈出前面的2個節點,以便將它們組合到一個表達式中。

例如:如果在存儲234和2後檢測到'+',則它會彈出前2個節點,創建一個新節點(234 + 2)並將其推回。

現在我的問題。我需要我的字符串的最大大小是嚴格的10,除非它是一個括號,作爲一個元素的完整操作。這是我需要改變我的計劃。但我也需要它回到之後的初始狀態。如何在不影響列表中的任何現有節點的情況下通過temp來增加大小?

+3

[不投結果'malloc'(http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc) – UnholySheep

+4

你在做什麼詢問是真的不清楚... –

+0

LL的目的是要有恆定的時間插入和刪除列表中的任何地方...如果你問是否可以增加元素的數量,那麼是的,你可以... – StoryTeller

回答

-1

您必須知道爲您的元素分配的每個內存塊都是從另一個內存塊中分離出來的。因此,您可以在複製數據時分配(或重新分配)您真正需要的大小的內存塊,並且不會影響其他任何塊。

struct { 
... 
} my_data; 

temp->element = (char*) alloc(sizeof(my_data)); 
memmove(temp->element, &my_data, sizeof(my_data)); 
+0

你仍然[不應該''返回'malloc'](http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc)。 'alloc'不是標準的C函數 – UnholySheep

相關問題