在运行时,我得到调试断言失败。
in dbgheap.c line 1322 expression _crtIsValidHeapPointer(pUserData)
如果我在调试器中运行,我会得到一个在下面显示的行中触发的断点。
如何修复此分配/解除分配错误?
我在头文件中有两个函数:
struct union_find_t;
struct union_find_t* union_find_init(int n);
void union_find_free(struct union_find_t* uf);
在.c文件中,这两个函数的实现是:
typedef struct union_find_t {
int* parent;
int* rank;
int components;
} *union_find_t;
struct union_find_t* union_find_init(int n) {
struct union_find_t* uf = malloc(sizeof(union_find_t));
uf->parent = malloc(n * sizeof(int));
uf->rank = malloc(n * sizeof(int));
uf->components = n;
for (int i = 0; i < n; ++i) {
uf->parent[i] = i;
uf->rank[i] = 0;
}
return uf;
}
void union_find_free(struct union_find_t* uf) {
free(uf->parent);
free(uf->rank);
free(uf); //*** breakpoint triggered here
}
答案 0 :(得分:1)
此:
typedef struct union_find_t
是一个typedef:
*union_find_t;
所以当你这样做时:
malloc(sizeof(union_find_t));
你只是为那个结构分配一个指针的空间,而不是你需要的结构!
尝试:
malloc(sizeof(struct union_find_t));
代替。