在运行时,我得到调试断言失败。
in dbgheap.c line 1322 expression _crtIsValidHeapPointer(pUserData)
如果我在调试器中运行,我会在下面显示的行中触发一个断点。
如何修复此分配/DE分配错误?
我在标题文件中有2个功能:
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
}
this:
typedef struct union_find_t
是:
的类型*union_find_t;
所以当您这样做时:
malloc(sizeof(union_find_t));
您只是为指针分配空间为该结构,而不是按照您需要的结构!
尝试:
malloc(sizeof(struct union_find_t));
而不是。