2014-10-28 154 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