2014-10-29 123 views
-2

我有一個結構體和一個指向它的某個實例的指針,現在我想創建一個指向該實例的新指針,而不依賴於第一個指針,這樣當我改變第一個指針,第二個指針仍然指向那個實例。 這裏是一個代碼片段:將指針的引用複製到另一個指針C

struct 
{ 
    int some; 
    int variables; 
} someStruct; 

someStruct *a=malloc(sizeof(someStruct)); 
a->some=10; 
a->variables=20; 
someStruct *b; 
b=a; 
a=NULL; 
Thread1 
{ 
    /// some operations on "b" 
    free(b); 
} 

Thread2 
{ 
    free(a); 
} 

在我的計劃,B也成爲NULL,我怎麼能避免呢?在下面的

+0

它還有另一種名爲sommStruct? – 2014-10-29 09:14:41

+1

你的代碼是正確的(除了結構錯字),但你必須用'b'來釋放內存。 – 2014-10-29 09:16:58

+2

發佈完整的代碼。沒有理由''b''應該用你顯示的代碼'NULL'。 – 2014-10-29 09:17:19

回答

0

B就不會成爲NULL:

sommStruct *b; 
b=a; 
a=NULL; 
+0

@ 1336087我只是回答了問題,顯示的程序代碼片段沒有任何缺陷,通過值複製指針,然後將源代碼設置爲NULL不會對先前創建的副本產生影響,對吧?那麼,爲什麼downvote? – 2014-10-29 09:16:21

+3

我做過了,對不起評論。我很新,所以也許這不是最好的事情。基本上說「你的問題無效」的答案不應該是一個評論嗎? – Dettorer 2014-10-29 09:21:42