나는 힙을 사용하여 알파벳 순서로 읽는 것을 궁극적으로 시도하고 있습니다. 전에 힙을 한 번도 해본 적이 없기 때문에 내 책을 따라 가고 있습니다. 사전에 단어의 개수를 알 수 없으므로 cin을 사용하여 동적으로 할당 된 배열에 단어를 저장합니다. 별도의 코드에서 나는 그것이 읽고 배열이 더 크게지고 있다는 것을 압니다. 그런 다음이 어레이를 무거워하려고 노력하고 있지만 프로그래밍에 익숙하지 않아서 세분화 오류가 계속 발생합니다. 어떻게 잘못했는지 추적하는 방법을 결정할 수 없습니다.heapify 알고리즘을 쓰려고 시도했습니다. 세그먼트 화 오류
void Heap::make(){
//make a heap from wordArray
//r = last non-leaf
for(int r = size/2; r > 1; r--){
int c = 2 * r; //location of left child
while(r <= size){ //size is a data member of Heap
//if r has 2 children and right is larger, make c the right child
if((c < size) && (wordArray[c] < wordArray[c+1])){
c++;
}
//fix if parent failed heap-order condition
if(wordArray[r] < wordArray[c]){
swap(wordArray[r], wordArray[c]);
r = c; //check that it didn't get messed up at c
c = 2 * c;
}
else{
break; //heap-order condition holds so stop
}
}
}
}
나는 프로그램이 if(wordArray[r] < wordArray[c])
부분까지 작동하는지 확인할 수 있습니다 couts와 장난에서이 내 heapify 코드입니다. wordArray의 요소는 불타고 있으며 비교기는 외부 테스트에서 올바르게 작동합니다. 이 배열이 동적 인 것과 관련이 있습니까? 나는 내가 여기서 잘못하고있는 것에 혼란 스럽다. 그것은 N-1 라인 arr[n-1];//this is the nth element
분할 오류 코드에서 여기 발생의의에 의해
문제의 원인을 찾기 위해 코드를 디버깅 해 보셨습니까? –
데이터 유형, 배열 최대 값 등을 모른 채로 r == size 일 경우 크기보다 큰 c == 2 * 크기. 그런 다음 wordarray [c]가 정의되지 않습니다. – LeppyR64
제 생각 엔 당신은 배열의 끝을 지나쳐 읽는 것 같습니다. wordArray [c], c = 2 * r = 2 * size/2를 처음 쳤을 때 wordArray [size]를 읽었을 수도 있지만 인덱스가 0이므로 끝까지 지나치지 않습니다. – TravisJ