当我将 foo
中的 normalizedWord
传递给 AddElement
后,我在尝试使用 key 执行 strcmp 时出现段错误
。没有释放,除了巨大的内存泄漏之外,没有任何问题。知道这里会发生什么吗?
foo(char* word)
{
char* normalizedWord = (char*)(malloc(strlen(word) + 1);
strcpy(normalizedWord, word);
Normalize(normalizedWord);
int result = AddElement(dict->hashTable, normalizedWord);
free(normalizedWord);
return result;
}
AddElement(HashTable *hashTable, const char *key)
{
if (0 == hashTable->elements[hashIndex])
{
// Add new element
hashTable->elements[hashIndex] = CreateElement(key);
}
else
{
// Search for existing or Add new element
Element* current = hashTable->elements[hashIndex];
/* ERROR HERE... */
while (0 != strcmp(current->key, key))
{
if (NULL == current->next)
{
current->next = CreateElement(key);
break;
}
else
{
current = current->next;
}
}
}
return 0;
}
Element* CreateElement(const char* key)
{
Element* element;
if (NULL == (element = malloc(sizeof(element))))
{
return NULL;
}
element->key = (char*) malloc(strlen(key) + 1);
strcpy(element->key, key);
return element;
}
最佳答案
除了 Illuminatus pr 指出的未初始化的 element->next
之外,您在分配的内存的大小 方面也存在问题。声明
Element* element = malloc(sizeof(element));
为一个指针分配足够的内存,而不是为实际元素分配内存。你需要写的是这样的:
Element* element = malloc(sizeof(*element));
唯一的区别是额外的星号,它可以区分分配八个字节还是一千字节。
关于c - 传递值后释放内存导致 EXC_BAD_ACCESS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27022459/