2014-10-28 3 views
-2

그래서 나는 데이터베이스를 만드는 방법을 만들려고합니다.분할 포인터 이중 포인터

int create(Database **data, int data_size, int data_count, void(*free)(void*)); 

함수의 특성은 다음과 같은 방법의 프로토 타입은 : 데이터가 널 또는 DATA_SIZE 0이면
를 FAIL을 복귀
그렇지 파라미터 데이터 필드

하나에 기초하여 데이터 필드의 초기화 구조체에 버킷 ** 버킷입니다 (기본적으로 버킷의 배열 인 자신의 키/값 각) 이를 초기화 내가 그랬어 :

*((*data)->buckets) = calloc(data_size, sizeof(Bucket)); 

그러나이 부분에서 세그먼트 오류가 발생하고 포인터를 사용하는 것으로 가정하지만 문제가있는 부분이 보이지 않습니다.

편집 : 해결. 내 문장 앞에 여분의 포인터가 있습니다.

+2

올리기 [MCVE에서

] (http://stackoverflow.com/help/mcve) 코드의 두 줄만으로는 말할 수 없습니다. 아마도 메모리를 올바르게 할당하지 않았을 것입니다. 포인터가 가리키는 메모리를 생각하십시오. –

+0

@MattMcNabb 미안하지만 오타가 수정되었습니다. 그리고 나는 gdb를 돌렸고 seg 오류는 그 필드에 접근하는 것으로 나온다. 내가 OP로 테스트하고있는 것을 추가 할 것입니다. –

답변

1

*data_ptr에는 값이 지정되지 않았습니다. 당신은 당신의 방법에 전달하기 전에 설정 (또는 방법을 할당하자)

을해야 하나 : data_ptr = malloc(sizeof(Database));

또는 방법

*data = malloc(sizeof(Database));

+0

아 좋아요, 나는 그 오류가 역 참조 방식의 결과라고 생각했습니다, 감사합니다. –

+0

나를 도와 줄 수있는 질문이 하나 더 있습니다. –

관련 문제