gpt4 book ai didi

c - 正确取消引用字符串数组

转载 作者:行者123 更新时间:2023-11-30 16:57:56 24 4
gpt4 key购买 nike

我正在为一个类开发拼写检查程序,但在尝试使用指针使其他函数可以访问哈希数组时遇到了麻烦。

由于程序太大,无法粘贴,因此以下只是一小部分代码。这部分代码的基本思路是:

-创建数组和指向数组的指针。-哈希每个单词并将该值用作数组中的索引。- 使用指针存储哈希值。- 使用数组指针和散列值访问数组。

如下所述,直接访问存储在数组中的单词是可行的,但是当尝试使用指针访问存储在数组中的单词时,我遇到了段错误。

==1845== Invalid read of size 8
==1845== at 0x401367: load (dictionary.c:133)
==1845== by 0x40095D: main (speller.c:45)
==1845== Address 0xfffc3fab8 is not stack'd, malloc'd or (recently) free'd


char** hash_array = calloc(HASH_TABLE_SIZE, sizeof(*hash_array));
char*** array_pointer;

// storing the address of the hash array in pointer
array_pointer = &hash_array;

uint32_t* hash_pointer;
hash_pointer = NULL;

uint32_t hash = hashlittle(word_buffer, word_length, 1578459744);
hash_pointer = &hash;

// this prints out the word successfully
printf("word in h-array: %s\n", hash_array[hash]);

// this seg faults
printf("word in h-array: %s\n", *array_pointer[*hash_pointer]);

最佳答案

您看到的问题是由于取消引用运算符 * 的运算符优先级造成的。

以下内容都是等效的:

*array_pointer[*hash_pointer]

*array_pointer[哈希]

*(array_pointer[哈希])

*((&hash_array)[哈希])

*(*(&hash_array + 哈希))

问题出在这里:*(&hash_array + hash)。您试图取消引用指向某个内存位置的指针,该内存位置与指针 hash_array 存储位置(而不是它指向的位置)偏移,这会导致未定义的行为。

关于c - 正确取消引用字符串数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39239278/

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