3

我只是C从解释语言背景开始,我在理解为什么这不起作用时遇到了问题。

我有一个Dynamic_Array结构(http://pastebin.com/h4k7Sk3U)和一个Task结构(http://pastebin.com/evs4TEQA)。

创建Dynamic_Array具有初始大小的实例时,我得到:

“./ctask ” terminated by signal SIGSEGV (Address boundary error)

我跟踪了错误gdb,谁表明它起源于dynamic_array.h:16

Dynamic_Array *dynamic_array_create(size_t initialSize) {
  Dynamic_Array *a;
  a->array = (Task *)malloc(initialSize * sizeof(Task));   // line 16
  a->used = 0;
  a->size = initialSize;
  return a;
}

我在那里做错了什么?我将初始大小与Task结构的大小相乘,这对他们来说应该是足够的内存。

4

1 回答 1

6

a在开始创建其成员之前,您从未分配过自己。

在你初始化它之前,a它指向一些你不应该接触的随机内存位置。

Dynamic_Array *dynamic_array_create(size_t initialSize) {
  Dynamic_Array *a = malloc(sizeof(Dynamic_Array));  // create 'a' first

  a->array = (Task *)malloc(initialSize * sizeof(Task));
  a->used = 0;
  a->size = initialSize;
  return a;
}
于 2013-09-04T18:53:09.900 回答