gpt4 book ai didi

c - 哈希表实现访问错误

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

我试图为我的项目创建一个哈希表,但我不断收到错误的访问错误。正如编译器告诉我的那样,语法没有错误。我认为我在内存分配中犯了一个错误,但我看不到它。如有任何帮助,我们将不胜感激。

我在此循环中遇到错误访问错误:

hash_itself_p hash_table = (hash_itself_p)malloc(sizeof(hash_itself_t));
for (i = 0; i < 50; i++)
{
hash_table->data_id[i]->id = -1; // EXC_BAD_ACCESS here
}

这是所有代码:

#include <stdio.h>
#include <stdlib.h>
#define size 50

typedef struct hash_value
{
int id;
int data;
int key;
} hash_values_t[1], *hash_values;

typedef struct hash_itself
{
hash_values data_id[size];
} hash_itself_t[1], *hash_itself_p;

int hash_key(int n)
{
return ( n*n + 2*n ) % size;
}

int hash_id(int n)
{
return n % size;
}

void insert(hash_itself_p hash_table, int person)
{
int id;
int key;

key = hash_key(person);
id = hash_id(key);

if (hash_table->data_id[id]->id == -1)
{
hash_table->data_id[id]->id = id;
hash_table->data_id[id]->data = person;
}
else
{
int block = id;
while (hash_table->data_id[block%50]->id != -1)
{
block++;
if (block%50 == id) return;
}
hash_table->data_id[block]->id = id;
hash_table->data_id[block]->data = person;
}
}

void display(hash_itself_p hash_table)
{
int i;
for (i = 0; i < size; i++)
{
printf("id = %d, data = %d, key = %d \n", hash_table->data_id[i]->id, hash_table->data_id[i]->data, hash_table->data_id[i]->key);
}
}

int main()
{
int i;
hash_itself_p hash_table = (hash_itself_p)malloc(sizeof(hash_itself_t));
for (i = 0; i < 50; i++)
{
hash_table->data_id[i]->id = -1;
}
insert(hash_table, 30);
display(hash_table);
}

最佳答案

您已将 hash_itself 中的 data_id 数组声明为指向 hash_value 结构的指针数组。由于这些指针未初始化,因此它访问无效内存。

我认为您想直接创建结构数组,在这种情况下您需要:

typedef struct hash_itself
{
hash_values_t data_id[size];
}

关于c - 哈希表实现访问错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27583641/

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