그래서 나는 데이터베이스를 만드는 방법을 만들려고합니다.분할 포인터 이중 포인터
int create(Database **data, int data_size, int data_count, void(*free)(void*));
함수의 특성은 다음과 같은 방법의 프로토 타입은 : 데이터가 널 또는 DATA_SIZE 0이면
를 FAIL을 복귀
그렇지 파라미터 데이터 필드
하나에 기초하여 데이터 필드의 초기화 구조체에 버킷 ** 버킷입니다 (기본적으로 버킷의 배열 인 자신의 키/값 각) 이를 초기화 내가 그랬어 :
*((*data)->buckets) = calloc(data_size, sizeof(Bucket));
그러나이 부분에서 세그먼트 오류가 발생하고 포인터를 사용하는 것으로 가정하지만 문제가있는 부분이 보이지 않습니다.
편집 : 해결. 내 문장 앞에 여분의 포인터가 있습니다.
올리기 [MCVE에서
] (http://stackoverflow.com/help/mcve) 코드의 두 줄만으로는 말할 수 없습니다. 아마도 메모리를 올바르게 할당하지 않았을 것입니다. 포인터가 가리키는 메모리를 생각하십시오. –
@MattMcNabb 미안하지만 오타가 수정되었습니다. 그리고 나는 gdb를 돌렸고 seg 오류는 그 필드에 접근하는 것으로 나온다. 내가 OP로 테스트하고있는 것을 추가 할 것입니다. –