gpt4 book ai didi

c - 传递值后释放内存导致 EXC_BAD_ACCESS

转载 作者:太空宇宙 更新时间:2023-11-04 08:34:04 25 4
gpt4 key购买 nike

当我将 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/

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