2014-10-28 203 views
-2

所以我試圖做一個方法來創建一個數據庫。的原型方法如下雙指針分割錯誤

int create(Database **data, int data_size, int data_count, void(*free)(void*)); 

的功能細節:
如果數據爲空或DATA_SIZE爲0時,返回FAIL
否則初始化基於參數

其中一個數據字段的數據字段在結構是剷鬥**桶(其本質上是桶的陣列,每個都有自己的鍵/值) 初始化此我做:

*((*data)->buckets) = calloc(data_size, sizeof(Bucket)); 

但是,我得到這個分段錯誤,我認爲這是我使用指針,但我沒有看到我的錯在哪裏它

編輯:解決。在我的發言前面有一個額外的指針

+2

發表[MCVE ](http://stackoverflow.com/help/mcve),從兩行代碼中不可能說出來。可能你沒有正確分配內存。考慮任何指針指向的內存中的位置。 – 2014-10-28 05:47:33

+0

@MattMcNabb對不起,打錯了,修好了。而且我運行了gdb,seg錯誤來自於訪問這些字段。我會將我正在測試的內容添加到OP – 2014-10-28 05:49:37

回答

1

*data_ptr永遠不會被分配一個值。你需要將它傳遞給你的方法之前設置它(或者讓你的方法分配它)

之一:

data_ptr = malloc(sizeof(Database));

或方法

*data = malloc(sizeof(Database));

+0

好吧,我認爲這個錯誤是我解除引用的方式的結果,謝謝。 – 2014-10-28 05:58:59

+0

如果你能幫助我,我還有一個問題,我正在更新op – 2014-10-28 05:59:14