2015-02-23 18 views
0

考慮下面的結構和功能:Segmenation故障(核心轉儲)在下面的代碼

typedef struct VectorT 

{ 

     NodeT **list; 
     int capacity; 
     int size; 
} VectorT; 


VectorT* newVector(int capacity) 

{ 

     struct VectorT *vector; 
     *vector->list = (NodeT*) malloc(capacity * sizeof(NodeT)); 
     vector->capacity = capacity; 
     vector->size = 0; 
     return vector; 
} 

請解釋爲什麼我得到一個分段錯誤,當函數被調用。

經過對這個函數和另一個函數的一些試驗和錯誤之後,我相信它與我如何訪問「**列表」有關。我可以評論與**列表有關的區域,它似乎工作正常。

+0

因爲那個'vector'永遠不會被初始化爲任何東西。因此段錯誤。 – 2015-02-23 03:02:17

+1

爲什麼人們堅持在評論框中提供答案?如果它不值得回答,它可能只是被刪除。正如Yoda所說的,「回答,或者回答不是,沒有嘗試」:-) – paxdiablo 2015-02-23 03:05:04

+0

我傾向於在回答很明顯或容易的時候發表評論。國際海事組織,這個問題應該可能只是刪除,是的。或者以「簡單的印刷錯誤」或其他方式關閉。此外,提供一個答案,不會得到upvotes或接受(通常情況下,與可怕的問題+新用戶的組合)殺死我的代表每個答案比率;) – 2015-02-23 03:13:39

回答

0

我相信你首先必須初始化向量,像這樣

struct VectorT *vector=(struct VectorT*)malloc(sizeof(struct VectorT)); 

而且,你行正在初始化列表應該是:

vector->list = (NodeT**) malloc(capacity * sizeof(NodeT*)); 

但是如果你的列表應被宣佈爲「 NodeT * list;「而不是NODET的**,你可以用它初始化:

vector->list = (NodeT*) malloc(capacity * sizeof(NodeT)); 
0

下面一行的問題是:

*vector->list = (NodeT*) malloc(capacity * size`of(NodeT)); 

你試圖去參考的東西是不是指針呢。您需要爲您的VectorT

VectorT* newVector(int capacity) 
{ 
    VectorT *vector = malloc(sizeof(VectorT)); 
    vector->list = malloc(capacity * sizeof(NodeT)); 
    vector->capacity = capacity; 
    vector->size = 0; 
    return vector; 
} 

分配內存在現實世界中的代碼你將要檢查的malloc返回值。根據你使用的是C還是C++,你需要施放返回值malloc

+0

我仍然收到這些變化的分段錯誤。 – udubb2012 2015-02-23 03:24:45

相關問題