私は一般的なクイックソートを記述しようとしています:一般的なクイックソートの何が問題になっていますか?
void _qsort(void *ptr,
size_t lrange,
size_t rrange,
size_t size,
int (*cmp)(const void *, const void *))
{
if (lrange < rrange) {
size_t i, j;
void *key;
key = malloc(size);
i = lrange;
j = rrange;
memcpy(key, ptr + i * size, size);
while (i < j) {
while (i < j && (*cmp)(ptr + j * size, key) > 0)
j--;
if (i < j) {
memcpy(ptr + i * size, ptr + j * size, size);
i++;
}
while (i < j && (*cmp)(key, ptr + i * size) > 0)
i++;
if (i < j) {
memcpy(ptr + j * size, ptr + i * size, size);
j--;
}
}
memcpy(ptr + i * size, key, size);
_qsort(ptr, lrange, i - 1, size, cmp);
_qsort(ptr, i + 1, rrange, size, cmp);
}
}
私はint配列の簡単なテストを書き、これをCMP funcitonです:
int cmp(const void *x, const void *y)
{
return *(int *)x - *(int *)y;
}
これは、コア・ダンプを引き起こすが、ときに私lrange, rrange, i, j
のタイプをsize_t
からint
に変更すると、正しく実行されますが、わかりません。なぜですか?
'size_t'とはなぜクラッシュするのかを理解するために[この質問](http://stackoverflow.com/questions/2550774/what-is-size-t-in-c)を見てください。ヒント:おそらくmemcpyが動作しているからでしょう。しかし、あなたは近くにいる。 – Shark
コアダンプをデバッグするのはなぜですか? – kamikaze
このコアダンプをデバッグするときに問題があります。「malloc.c:No such file or directory」です。 – protream