【发布时间】:2023-03-07 20:04:01
【问题描述】:
我对编程比较陌生,这是我在 C 领域工作的第一个学期。所以这完全有可能是一个非常简单的错误,或者也有可能对我做错的解释有过之而无不及我的头。
我的程序读入一个文本文件,然后在一个哈希图中建立一个索引,告诉用户文本中有哪些单词以及它们出现了多少次。但是,每当我使用 myCompare 函数时,我都会继续出现段错误(代码 11)。这是它的代码:
int myCompare(void *s1, void *s2)
{
printf("\n\nStarting myCompare...");
printf("\n*s1: %s", (char *)s1);
printf("\n*s2: %s", (char *)s2);
char *key1 = (char *)s1;
printf("\n\nkey1: %s", key1);
char *key2 = (char *)s2;
printf("\nkey2: %s", key2);
return (strcmp(key1, key2));
}
我向它和调用它的函数添加了一些打印语句,以便让我更好地了解正在传递的内容以及发生段错误的确切位置,但我不确定它为什么会发生。这是输出,如果有人需要更多代码来理解我的错误,请告诉我。谢谢大家
struct hashLink {
void* key;
void* value;
struct hashLink * next;
};
struct hashMap {
hashLink ** table;
int tableSize;
int count;
};
...
void removeKey (struct hashMap * ht, void* k, comparator keyCompare, hashFuncPtr hashFunc)
{
struct hashLink *previousLink;
struct hashLink *currentLink;
int index = 0;
printf("\n\nVariables Declared");
printf("\nPre-hash index: %d", index);
index = ((*hashFunc)(k) % ht->tableSize);
void* keyPtr = &ht->table[index]->key;
printf("\nPost-hash index: %d", index);
printf("\nkeyPtr value: %p", keyPtr);
printf("\nk value: %p", k);
int testCompare = (*keyCompare)(k, keyPtr);
printf("\nkeyCompare: %d", testCompare);
if ((*keyCompare)(k, keyPtr) ==)){
... }
终端输出:
Starting hash2...
Passed key: and
value of r: 617
Post-hash index: 7
keyPtr value: 0x10e65dcd8
k value: 0x10e65df24
Starting myCompare...
*s1: and
*s2:
key1: and
key2:
keyCompare: 65
Starting myCompare...
*s1:
*s2: and
key1:
Segmentation fault: 11
logout
【问题讨论】:
-
请说明您是如何打电话给
myCompare的。 -
我猜
ht->table[index]->key是一个char *。请改用void* keyPtr = ht->table[index]->key; -
最好在使用时检查
NULL,不要依赖其他代码。 -
可能
ht->table[index]->key是NULL或未正确分配 -
要获得帮助,请发帖MCVE。按照目前的情况,问题出在您尚未发布的代码中。
标签: c segmentation-fault hashtable void-pointers strcmp