gpt4 book ai didi

c - 堆损坏 - 调试断言失败。在 dbgheap.c 行 1322 表达式 _crtIsValidHeapPointer(pUserData)

转载 作者:太空宇宙 更新时间:2023-11-04 03:19:52 29 4
gpt4 key购买 nike

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

in dbgheap.c line 1322 expression _crtIsValidHeapPointer(pUserData)

如果我在调试器中运行,我会在下面显示的行中触发一个断点。

如何修复此分配/取消分配错误?

我在头文件中有 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
}

最佳答案

这个:

typedef struct union_find_t

是一个类型定义:

*union_find_t;

所以当你这样做的时候:

malloc(sizeof(union_find_t));

您只需为指向该结构的指针分配空间,而不是为您需要的结构分配空间!

尝试:

malloc(sizeof(struct union_find_t));

相反。

关于c - 堆损坏 - 调试断言失败。在 dbgheap.c 行 1322 表达式 _crtIsValidHeapPointer(pUserData),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47487387/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com