2013-09-04 2 views
3

번역 된 언어 배경에서 C으로 시작하고 있는데 왜 작동하지 않는지 이해하는 데 문제가 있습니다.동적 배열의 주소 경계 오류

나는 Dynamic_Array 구조체 (http://pastebin.com/h4k7Sk3U) 및 Task 구조체 (http://pastebin.com/evs4TEQA)를 가지고 있습니다.

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

나는 그것의 dynamic_array.h:16에 유래 보여줍니다 gdb와 오류, 추적 :

초기 크기의 Dynamic_Array 인스턴스를 생성 내가 얻을

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 구조체의 크기를 곱해서, 구조체가 충분한 메모리라고 가정합니다.

+0

15 번째 줄에는 "나는 'a'라는 포인터가 있습니다. 실제로 가리 키기위한 객체를 만들지 않았습니다. 15 ~ 16 행은'var a; a.foo = ...;'JavaScript에서. (또한'malloc'의 반환 값을 캐스팅 할 필요가 없습니다.) – DCoder

답변

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; 
} 
+0

고마워요, 지금은 의미가 있습니다 :) – jviotti