我刚刚从解释性语言背景开始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}}结构的大小,这应该是足够的内存。
答案 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;
}