在 C 中通过空指针传递字符串时出现 Seg 错误



我对编程比较陌生,这是我第一次用C语言工作。因此,这完全有可能是一个非常简单的错误,或者也有可能对我做错了什么的解释可能会超出我的头脑。

我的程序在文本文件中读取 a 在哈希图中构建一个索引,告诉用户文本中有哪些单词以及它们出现的次数。但是,每当我使用 myCompare 函数时,我都会继续段错误(代码 11)。这是它的代码:

int myCompare(void *s1, void *s2)
{
    printf("nnStarting myCompare...");
    printf("n*s1: %s", (char *)s1);
    printf("n*s2: %s", (char *)s2);
    char *key1 = (char *)s1;
    printf("nnkey1: %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("nnVariables 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

如果您编写段错误,那么您可能正在尝试使用包含垃圾的指针进行操作,并且实际上并不指向您拥有的任何数据。尝试使用valgrind。

  • 编译代码时无需优化,并包含调试符号

     g++ -O0 -g ./your_program.cpp -o ./your_program
    
  • 使用瓦尔格林德的内存检查器

     valgrind --leak-check=yes --track-origins=yes ./your_program
    

valgrind 很可能会告诉你你的代码到底出了什么问题。

相关内容

  • 没有找到相关文章

最新更新