Valgrind无效的写错误与指向结构的指针数组

时间:2011-11-13 03:56:31

标签: c valgrind

我从valgrind那里得到一个错误(好吧,实际上有很多错误),我在整理时遇到了麻烦。

我正在使用此代码声明一个struct:

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语句的行。在我看来,我正在分配,而不是写作,所以错误让我感到困惑,我无法弄清楚该做些什么。任何帮助表示赞赏。

...谢谢

1 个答案:

答案 0 :(得分:7)

index = malloc(sizeof(HashTable));

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

这也说明了为什么隐藏类型的typedef会让人感到困惑。