堆腐败 - 调试断言失败了.在dbgheap.c第1322行中表达式_crtisvalidheappointer(pus



在运行时,我得到调试断言失败。

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));

而不是。

相关内容

  • 没有找到相关文章

最新更新