BinaryInsertionSort의 두 번째 인수로 100보다 큰 값을 전달하면 세그먼트 화 오류가 발생합니다.세그먼트 오류가 발생하는 이유는 무엇입니까?
int
BinarySearch (int a[], int low, int high, int key)
{
int mid;
if (low == high)
return low;
mid = low + ((high - low)/2);
if (key > a[mid])
return BinarySearch (a, mid + 1, high, key);
else if (key < a[mid])
return BinarySearch (a, low, mid, key);
return mid;
}
void
BinaryInsertionSort (int a[], int n)
{
int ins, i, j;
int tmp;
for (i = 1; i < n; i++) {
ins = BinarySearch (a, 0, i, a[i]);
if (ins < i) {
tmp = a[i];
memmove (a + ins + 1, a + ins, sizeof (int) * (i - ins));
a[ins] = tmp;
}
}
}
아마도 관련이 없지만 if (low> = high)라고 말해야합니다. –
디버거에서 실행하고 스택 추적을 보았습니까? –
아마도 n을 늘리면 전달하는 배열의 크기가 증가 할 것입니다. 디버거를 사용하여 segfaults 행 (그리고 그 시점에서 액세스하려고 시도하는 색인)을 찾으려고 했습니까? – Cascabel