我的指针错误地改变了地址

时间:2013-07-17 23:56:59

标签: c pointers segmentation-fault

我有一个非常简单的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 *的起始地址会给出我上面声明的操作?

如果您认为我错过了更重要的信息,我道歉。让我知道,我会发布更多。感谢您的回复。

1 个答案:

答案 0 :(得分:-1)

索引func似乎有错误吗?

// A is 65 through Y is 89
int get_index(char key) {
   return ((int) key) - 65;
}

应该是(int)(键 - 65)吗?