c - 对结构使用 malloc 时出错

标签 c pointers struct malloc

我正在为家庭作业创建哈希表。我正在使用 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?

最佳答案

不完全清楚 OP 的意图,但我希望 Node **ht_create(void) 创建并返回指向 Node * 数组的指针,因此返回类型节点**。然后数组元素将被初始化为 NULL,因为每个哈希表桶的开头是一个空列表。

提示:分配内存的简单方法。

Some_type *pointer = malloc(sizeof *pointer * array_size);

示例代码:

Node **ht_create(size_t htsize) { // pass in size
  if (htsize < 1) {
    printf("Error: please enter adequate size for hashtable");
    return NULL;
  }

  //allocate hashtable
  Node **hashtable = malloc(sizeof *hashtable * htsize);
  if (hashtable == NULL) {
    printf("Error: could not allocate memory for hashtable");
    return NULL;
  }

  // Initialize values
  for (size_t i=0; i<htsize; i++) {
    hashtable[i] = NULL;
   }
  return hashtable;
}

关于c - 对结构使用 malloc 时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33685394/

相关文章:

使用指针组合两个不同的数组?

c++传递指针

c++ - 我可以使用 %p 说明符输出 Windows 句柄吗?

c - 包含结构数组的结构不能由相同类型列表中的值分配

结合静态库

libpcap 编译期间的类型冲突

java - 如何在native中写/读直接的ByteBuffer?

c - 如何将字符串中的指针值传递给指针

c++ - 调用默认构造函数的正确方法是什么?

c - 尝试从文本文件中读取数据,从中创建结构,并将字段打印到标准输出