gpt4 book ai didi

c - Valgrind 无效写入错误,包含指向结构的指针数组

转载 作者:太空宇宙 更新时间:2023-11-04 00:41:00 24 4
gpt4 key购买 nike

我在 valgrind 中遇到了一个错误(好吧,实际上是一大堆错误),我在整理时遇到了麻烦。

我正在使用这段代码来声明一个结构:

struct HashTableT {

HashFuncT hashFunc;
// array of SortedList's
SortedListPtr* arrayPtr;
};

typedef struct HashTableT* HashTable;

arrayPtr 是指向其他结构的指针数组的指针。然后用这个分配内存:

HashTable index;
index = malloc(sizeof(HashTable));
memcheck(index);
index->hashFunc = func;
index->arrayPtr = malloc(sizeof(SortedListPtr) * size);
memcheck(index->arrayPtr);
// initialize array
int i;
for (i = 0; i < size; i++) {
index->arrayPtr[i] = NULL;
}
return index;

Valgrind 给我这个错误:

==18735== Invalid write of size 4
==18735== at 0x80497F1: HTCreate (chainedhash.c:35)
==18735== by 0x8049727: main (main.c:457)
==18735== Address 0x402e02c is 0 bytes after a block of size 4 alloc'd
==18735== at 0x4005B83: malloc (vg_replace_malloc.c:195)
==18735== by 0x804979B: HTCreate (chainedhash.c:32)
==18735== by 0x8049727: main (main.c:457)

第 35 行是带有 malloc 语句的那一行。在我看来,我是在分配,而不是在写作,所以这个错误让我很困惑,我不知道该怎么办。感谢您的帮助。

谢谢...

最佳答案

index = malloc(sizeof(HashTable));

Malloc 有足够的内存用于指针,而不是您的结构。

这也说明了为什么像这样隐藏类型的 typedef 会使事情变得困惑。

关于c - Valgrind 无效写入错误,包含指向结构的指针数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8109496/

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