2012-03-27 57 views
1

我正在嘗試構建結構體的對象,但在分配值時出現了分段錯誤。在構建對象後,它將通過指針傳遞到列表中。這裏是我的實現:在C++中使用指針進行分段錯誤

struct clientInfo { 
    int client, a, b; 
}; 
List *info=new List(); 

void thread(int which) { 
    clientInfo *cI; 
    cI->client=which; 
    cI->a=4; 
    cI->b=5; 
    info->Append(cI); 
} 

執行'cI-> client ='期間產生了分段錯誤。該項目正在爲熟悉的任何人在nachos平臺上撰寫,但List的定義與C++中的任何鏈接列表大致相同。對於任何不熟悉玉米片的人來說,'void thread'是我的'int main'。

在此先感謝。

+0

'nachos'標籤是什麼意思? – cnicutar 2012-03-27 07:06:14

+0

@cnicutar:這是一個學術操作系統。欲瞭解更多信息:http://www.cs.washington.edu/homes/tom/nachos/README – LihO 2012-03-27 07:49:53

+0

你應該閱讀一本C++書籍。太多的指針,太多'新'。這是嘗試在C++中創建Java代碼,並且只會是痛苦的。請參閱推薦的書籍:http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list – 2012-03-27 07:56:26

回答

2

你必須創建clientInfo *cI,像

clientInfo *cI = new clientInfo(); 
+1

你無限的智慧只會被我無限的愚蠢所超越。感謝你的快速回復。 – cazzer 2012-03-27 07:08:14

2

cI指針指向實際「無處有意義的你」時,CI->成員分配。 在使用之前啓動指向某個存在的指針(或爲其分配一些內容)。

+0

FWIW,取決於程序的編譯方式,指針可能指向隨機內存位置或NULL。 – bryce 2012-03-27 07:34:10

+0

@bryce:糾正爲「對你毫無意義」 – 2012-03-27 07:41:19

4

clientInfo *cI;聲明指向類型爲clientInfo的對象的指針。它不構造這個對象。您必須在嘗試訪問其成員之前構建它:cI = new clientInfo();

1

你不能直接賦值的結構pointer.it應該使用新的一樣給予一定的分配:

clientInfo *cI =new clientInfo(); 

如果你不希望這樣做只是decalre的對象,而不是一個指針* CI。如下圖所示:

clientInfo cI; 

現在,您可以直接賦值像cI.a=...這個數據將在棧中stroed而不是堆。