2013-04-11 151 views
0

我有以下情況。我的目標是讓a和b使它們都指向相同的記憶。但條件是它們都是指針。我該怎麼做?指針結構

struct myStruct 
{ 
struct anotherStruct* anoStrct; 
}; 
main() 
{ 
    struct myStruct *a=(struct myStruct*)malloc(sizeof(struct myStruct)); 
    struct myStruct *b=(struct myStruct*)malloc(sizeof(struct myStruct)); 
    a=b; 


} 
+1

在你的代碼中,你第一個'malloc'(原來的'a')丟失的內存區域是內存泄漏。使用內存泄漏檢測器(例如Linux上的valgrind)和調試器。 – 2013-04-11 07:44:10

回答

6

你可以爲一個指針,例如,a作爲

struct myStruct *a= malloc(sizeof(struct myStruct)); 

分配空間,並指定這個指針b作爲

struct myStruct *b = a; 

編輯:當您複製三分球,並利用它們對一些操作,你也必須小心複製即副本是淺拷貝還是深拷貝。請參閱What is the difference between a deep copy and a shallow copy?瞭解更多詳情。

在上述代碼段中,如果在初始化ba後執行以下語句,您將在原始指針已被釋放時遇到分段錯誤。

free(b); 
a->anoStrct = malloc(sizeof(struct anotherStruct)); 
+4

您不應該需要投射malloc,請參閱http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc – chrisw 2013-04-11 07:48:00

+0

@ chrisw69謝謝..我剛剛複製了該問題的陳述。當我的系統崩潰時,我正處於編輯過程中:) – Ganesh 2013-04-11 07:49:21

3
struct myStruct *a=malloc(sizeof(*a)); 
struct myStruct *b=a; 

注意,因爲ab都指向相同的內存,更新一個會(顯然)也影響其他。另外,您只能稍後在其中一個指針上調用free

您的建議代碼還會使兩個變量都指向相同的內存。但是,它泄漏了最初爲a分配的內存。

+0

感謝哥們。也許是因爲凌晨4點,我睡着了,我問了這個愚蠢的問題......你醒了我。:-) – sattu 2013-04-11 07:50:16

+1

@simonc **原來分配給b **的不是儀式。最初分配給'a'丟失 – 2013-04-11 08:05:59

+0

@Koushik謝謝,這對我來說是粗心的。現在糾正了。 – simonc 2013-04-11 08:08:39