我正在尝试编写某种面向对象的 C,当我在尝试分配结构时遇到这个完全随机的分配错误时。
这就是我的结构的样子:
typedef struct {
void **array;
size_t used;
size_t size;
} DynArray;
这是有问题的代码,或者至少是所有运行的代码行。
DynArray *dyn_array_create(size_t initial_size /* = 6 */) {
DynArray *a = (DynArray *) malloc(sizeof(DynArray));
if (a == NULL) {
return NULL;
}
// EXC_BAD_ACCESS here ↓
a->array = (void **) malloc(initial_size * sizeof(void *));
...
}
我已经验证
a
不为空,我的内存不是太低或类似的东西。更奇怪的是,在此之前有一个测试效果很好。这里根本没有真正的输入。据我所知,测试是相同的。每个的第一行是DynArray *a = dyn_array_create(6);
。有这方面的线索吗?
这个问题是在我修复内存泄漏时出现的。我想我刚刚设法修复了错误的数量,给自己留下了一个我实际上可以看到的损坏的堆。感谢所有评论的人。