Я относительно новичок в программировании, и это мой первый термин, работающий на C. Таким образом, вполне возможно, что это может быть действительно простая ошибка, или также возможно, что объяснение того, что я сделал не так, может переместиться через мою голову.Seg Ошибка при передаче строк через указатели void в C
Моя программа читает в текстовом файле a строит конкорданс в hashmap, который сообщает пользователю, какие слова находятся в тексте и сколько раз они происходят. Тем не менее, я продолжаю segfault (код 11), всякий раз, когда я использую функцию myCompare. Вот его код:
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));
}
Я добавил некоторые операторы печати, к нему и функция, которая вызывает его, чтобы дать мне лучшее представление о том, что проходит и именно там, где она segfaulting, но я не знаю, почему это происходит. Вот результат, если кому-то нужно больше кода, чтобы понять мою ошибку, просто дайте мне знать. Спасибо, ребята
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'. – Rufflewind
не использовать 'void *' –
use 'gdb' ...... –