gpt4 book ai didi

将结构数组的索引与 NULL 进行比较,而不是评估为 true;

转载 作者:太空宇宙 更新时间:2023-11-04 08:40:33 25 4
gpt4 key购买 nike

我有一个结构数组,我将它传递给一个函数。然后我检查该数组的索引以查看它是否为 NULL,此时它应该是 NULL。问题是将它与 NULL 进行比较并不会评估为真。

这是我声明结构和创建数组的地方。

typedef struct ListStruct {
NodePtr first;
NodePtr last;
NodePtr current;
int numNodes;
} ListStruct;

typedef struct ListStruct* ListHndl

ListHndl* newHash(int size){
ListHndl* arr = malloc ( size*sizeof( ListHndl ));
for(int y = 0; y<size; y++){
arr[y] = NULL;
}
return arr;
}

然后我将它传递给这样的函数

function(ListHndl* HashTable)

并将索引与空值进行比较

if(HashTable[index] == NULL) {
//stuff that doesn't happen but should
}

这显示了一些使用数组的函数。

void insert(int ID, char* title, int size, ListHndl* HashTable){
int index = hash(title, size);
if(HashTable == NULL ){
printf("can't insert hash table is null");
return;
}
//If the 'bucket' at the hashed index is empty, create a new list and initialize it appropriately
if(HashTable[index] == NULL){
//Do stuff, this doesn't get called even though it should
}else{
//do other stuff, this shouldn't be done when the function is called the first time but does in this case
}

这是测试程序。它在第一次插入时崩溃。

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include "list.h"
#include "hash.h"

int main(){

ListHndl temp = newHash(5);
printf("new hash created!\n");
insert(1, "munches", 5, temp);
printf("insertion has occurred! :)\n");
insert(2, "aids", 5, temp);
insert(3, "loki", 5, temp);
insert(4, "kelp", 5, temp);
insert(5, "kelp", 5, temp);
printf("insertion has occured!\n");
lookup(&temp, "munches", 5);
lookup(&temp, "aids", 5);
lookup(&temp, "loki", 5);
lookup(&temp, "kelp", 5);
printf("WE LIVE!\n");
return 0;
}

这是用于获取哈希表索引的哈希函数。

int hash (const char* word, int size)
{
unsigned int hash = 0;
for (int i = 0 ; word[i] != '\0' ; i++)
{
hash = 31*hash + word[i];
}
return hash % size;
}

最佳答案

您的代码包含许多明显的错误,这些错误很可能会导致您的问题。函数 newHash 声明为返回 ListHndl*

ListHndl* newHash(int size)

然而在 main 中你使用它就好像它返回一个 ListHndl

ListHndl temp = newHash(5);

这没有任何意义,肯定会从编译器中产生诊断信息(关于指针类型不匹配的信息)。您显然忽略了这些诊断消息并仍然运行了该程序。

稍后在代码中,您再次将该 temp 值(ListHndl 类型)传递给可能需要 ListHndl * 参数的函数。这肯定也会从编译器生成诊断消息,而您也忽略了它们。

不要忽略诊断信息。修复代码中的问题(错误和警告)。从那里开始。由于此类错误,您现在拥有的东西毫无意义。

关于将结构数组的索引与 NULL 进行比较,而不是评估为 true;,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23821904/

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