【发布时间】:2015-11-13 03:21:22
【问题描述】:
我正在为家庭作业创建哈希表。我正在使用 Xcode,它没有任何即时错误,但是当我尝试运行它时,当涉及到最初创建哈希表并为其分配的函数时,我得到了 Thread 1:EXC_BAD_ACCESS 错误之一。特别是使用 malloc 的行:
Node **ht_create(void)
{
Node **hashtable[htsize];
int Node_size = sizeof(Node);
if( htsize < 1 )
{
printf("Error: please enter adequate size for hashtable");
return NULL;
}
for (int i = 0; i<=htsize;i++)
{
hashtable[i] = malloc(Node_size);
}
if( ( **hashtable) == NULL )
{
printf("Error: could not allocate memory for hashtable");
return NULL;
}
return *hashtable;
}
我对 C 语言还很陌生,我才 2 个月前才开始学习它,所以如果有明显的问题并且我只是个白痴,请多多包涵。 htsize 是在别处声明的整数命令行参数。我不知道它是否有帮助,但这里是定义我的“节点”结构的代码:
struct NodeType
{
char *key;
int value;
struct NodeType *next;
};
typedef struct NodeType Node;
在黑暗中射击:这是否与我在结构中有指针这一事实有关? struct NodeType *next; 部分?
任何帮助将不胜感激,在此先感谢。
编辑:我现在有了它,所以它使用 for 循环为表中的每个节点分配,但它返回我的“错误:无法为哈希表分配内存”所以我的哈希表现在 = NULL?
【问题讨论】:
-
顺便说一句,有些人认为 typedef 结构是不好的做法。由于您是 C 的新手,因此您应该研究一下。
-
@Bobby Sacamano 顺便说一句,有些人,包括 C11 规范,不认为 typedef 结构是不好的做法。你应该调查一下。
-
@chux 是的,这就是我建议调查这个问题的原因。我知道很多教授(至少在我的大学)表现得好像这只是标准的做法。
-
也许您打算以通常的方式分配一个二维数组?
-
@BobbySacamano 使用 typedef 是作业的一部分,但感谢您的提示