我有一個指向結構與工會複製了用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足以複製聯合中的內容。
我有一個指向結構與工會複製了用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足以複製聯合中的內容。
你不能只是解引用指針,如果他們不指向任何有效的。
爲了能夠做到x->u
你必須確保x
指向一些有效的內存,你看的代碼取消引用未初始化的指針導致的未定義行爲,最有可能崩潰。同樣適用於y->u
。因此,請確保x
和y
在取消引用前指向有效內存。
x->u = y->u
不會執行深拷貝但淺拷貝。
你基本上會與兩個指針指向相同的內存,這是不是可能是你想要或者需要什麼收場。
如果您需要深度複製,您應該分配足夠的內存以保存要複製的數據,然後使用memcpy
將源聯合的內容複製到它。
良好閱讀:
What is the difference between a deep copy and a shallow copy?
他最好先爲x和y分配一些空間來指向。 –
@CarlNorum:嗯着,當然,我認爲OP會做so.Anyways既然你提出來的,我會添加一個關於它的註釋。 –
這語句,會導致段錯誤是肯定的! –
順便說一下:'typedef A * A_t;'是C語法錯誤。你使用的是C++編譯器嗎? BTW2:typedeffing指針應該被認爲是一個壞習慣。 – wildplasser