整数のクイックソートアルゴリズムを書いていますが、srand関数で奇妙なセグメンテーション違反エラーが発生します。これがsort.hのコードです。
int distributePivot (int *a, int left, int pivot, int right) {
int i, j;
if (pivot != right)
swapInt(&pivot, &right);
i = left;
j = right - 1;
while (i < j) {
while (i < j && a[i] <= a[right])
i++;
while (j > i && a[j] >= a[right])
j--;
if (i < j)
swapInt(&a[i], &a[j]);
}
if (i < right)
swapInt(&a[i], &a[right]);
return i;
}
void intArrayQuickSort (int *a, int left, int right) {
int pivot;
if (left < right) {
pivot = rand() % (right - left +1) + left;
pivot = distributePivot(a, left, pivot, right);
intArrayQuickSort (a, left, pivot -1);
intArrayQuickSort (a, pivot, right);
}
}
そして、これがsort-test.cからの呼び出しです。
srand(time(NULL));
intArrayQuickSort(temp, 0, n - 1);
temp
整数へのポインタはどこにありますか。
そして、gdbで実行したときに発生するエラーは次のとおりです。
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff77e9884 in rand () from /lib64/libc.so.6
手伝ってくれませんか?
どうもありがとうございます。
編集:これはswapInt関数です:
void swapInt (int *a, int *b) {
int aux = *a;
*a = *b;
*b = aux;
}