我有一个非常简单的C程序。我的程序使用我创建的一个非常简单的哈希文件。这是我的哈希文件:
const int SIZE = 26;
// A is 65 through Y is 89
int get_index(char key) {
return ((int) key) - 65;
}
void reset_hash(int* hash) {
int i = 0;
for (; i < (SIZE - 1); i++) {
hash[i] = 0;
}
hash[SIZE -1] = '\0';
}
int get_value(int* hash, char key) {
return hash[get_index(key)];
}
void increment_value(int* hash, char key, int value) {
hash[get_index(key)] = ++value;
}
如果绝对必要,我可以解释为什么我的哈希函数如此简单。我此时并不认为有必要,但我可以告诉你,我的域非常简单和恒定,这就是为什么这个哈希算法运行良好的原因。
现在,哈希从另一个文件的主要创建一次:
int* hash = calloc(SIZE_OF_AC, sizeof(int));
并以相应的顺序从同一文件中调用以下操作:
reset_hash(hash);
get_value(hash, /* some character here */);
increment_value(hash, /* some character here */, value);
我也是多次传递哈希指针,两个主要目标函数接收哈希参数,如下所示:
int* hash
调用函数只发送hash
。
现在,我正在使用:
打印hash
的地址
printf("hash: %p\n", hash);
在我的主文件中的一个位置,但是多次打印,因为该函数被执行了几次。这是我收到的输出:
hash: 0x801010
hash: 0x801010
hash: 0x3100000000801010
Segmentation fault (core dumped)
我的问题是,为什么哈希的地址似乎发生变化?在c中的什么条件下,int *的起始地址会给出我上面声明的操作?
如果您认为我错过了更重要的信息,我道歉。让我知道,我会发布更多。感谢您的回复。
答案 0 :(得分:-1)
索引func似乎有错误吗?
// A is 65 through Y is 89
int get_index(char key) {
return ((int) key) - 65;
}
应该是(int)(键 - 65)吗?