2014-05-04 73 views
0

你好可以說,我有這樣的代碼結構裏面內部結構工會在C

typedef struct entry { 
    union { 
     struct A { 
      char *c; 
     } *A; 
     struct B { 
      char *c; 
     } *B; 
    } value; 
} *TableEntry; 

我在做對條目的malloc和現在我想將一個字符串從一個結構拷貝到c。我是否必須爲struct A分配內存,然後爲c分配內存還是爲表項的第一個malloc分配所有內存?謝謝你提前

+2

這是怎麼C++? –

+2

@Malloc:這不是C++? – Deduplicator

+0

它不是C++。你可以爭辯說C是C++的一個子集,你會錯的。 – littleadv

回答

2

的當您分配了TableEntry分配內存 - 你分配了整個聯盟的內存。其中的指針被分配,但它們指向的是 - 沒有。所以你應該分配值給你分配給c成員的結構和A/B成員的聯合。

請注意,AB共享相同的空間。

+0

所以我們有一個malloc的整個結構,然後只有c是這樣嗎? – user3187860

+0

@ user3187860是的。而你只分配一個結構,無論是A還是B - 你不能同時擁有這兩個結構。 – littleadv

0

爲了澄清,需要三個allocs,例如:

TableEntry *t = malloc(sizeof *t); 
t->A = malloc(sizeof *t->A); 
t->A->c = malloc(50); 

這種設計是有問題的,雖然,因爲沒有辦法告訴這是目前活躍出來AB。您將不得不擁有另一個索引或其他記錄此條目是否爲AB的內容。