gpt4 book ai didi

c - 在 C 中通过 void 指针传递字符串时出现段错误

转载 作者:行者123 更新时间:2023-11-30 20:25:27 26 4
gpt4 key购买 nike

我对编程相对较新,这是我在 C 语言中工作的第一个学期。因此,这完全有可能是一个非常简单的错误,或者也有可能对我做错的事情的解释可能会过去我的头。

我的程序读取一个文本文件,并在 HashMap 中构建一个索引,告诉用户文本中有哪些单词以及它们出现了多少次。但是,每当我使用 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

最佳答案

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

  • 在不进行优化的情况下编译代码并包含调试符号

     g++ -O0 -g ./your_program.cpp -o ./your_program
  • 使用valgrind的内存检查器

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

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

关于c - 在 C 中通过 void 指针传递字符串时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28983604/

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