动态数组上的地址边界错误

时间:2013-09-04 18:46:55

标签: c

我刚刚从解释性语言背景开始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

我在那里做错了什么?我将初始大小乘以{{1}}结构的大小,这应该是足够的内存。

1 个答案:

答案 0 :(得分: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;
}