2013-01-13 18 views
6

我有一個指向結構與工會複製了用C從聯合數據

所以讓我們說我們有

struct A { 
    union { 
    char **word; 
    struct A *B 
    } u; 
}; 

,我有變量x和A型的Y *

typedef A* A_t; 
A_t x; 
A_t y; 

將x-> u = y-> u足以複製聯合中的內容。

+3

這語句,會導致段錯誤是肯定的! –

+0

順便說一下:'typedef A * A_t;'是C語法錯誤。你使用的是C++編譯器嗎? BTW2:typedeffing指針應該被認爲是一個壞習慣。 – wildplasser

回答

4

你不能只是解引用指針,如果他們不指向任何有效的。
爲了能夠做到x->u你必須確保x指向一些有效的內存,你看的代碼取消引用未初始化的指針導致的未定義行爲,最有可能崩潰。同樣適用於y->u。因此,請確保xy在取消引用前指向有效內存。

x->u = y->u 

不會執行深拷貝淺拷貝
你基本上會與兩個指針指向相同的內存,這是不是可能是你想要或者需要什麼收場。

如果您需要深度複製,您應該分配足夠的內存以保存要複製的數據,然後使用memcpy將源聯合的內容複製到它。

良好閱讀:
What is the difference between a deep copy and a shallow copy?

+1

他最好先爲x和y分配一些空間來指向。 –

+0

@CarlNorum:嗯着,當然,我認爲OP會做so.Anyways既然你提出來的,我會添加一個關於它的註釋。 –