Я получаю ошибку на линии, где я положил знак «<<--
» (строка 9). у него не было компиляционной ошибки, но при подаче ввода он говорит «Ошибка сегментации: 11». Я не знаю, что пошло не так.Я получаю ошибку сегментации: 11
вход:
3 3
1 1 1
2 2 2
3 1 5
Код:
#include <stdio.h>
#include <stdlib.h>
int comp (const void * x, const void * y)
{
int *a = *(int **)x;
int *b = *(int **)y;
//getting error here
if (a[0] == b[0]) // <<-- here
{
if (a[2] == b[2])
{
return -(a[1] - b[1]);
}
else
{
return a[2] - b[2];
}
}
else
{
return a[0] - b[0];
}
}
int main()
{
int n;
long long d;
scanf("%d %lld", &n, &d);
int t[n][3];
for (int i = 0; i < n; i++)
{
scanf ("%d %d %d", &t[i][0], &t[i][1], &t[i][2]);
}
printf("%lu\n", sizeof(t[0]));
qsort(t, n, sizeof(t[0]), comp);
for (int i = 0; i < n; ++i)
{
printf("%d-%d-%d\n", t[i][0], t[i][1], t[i][2]);
}
}
Может кто-нибудь помочь мне с этим?
Добро пожаловать в переполнение стека. Вскоре прочитайте страницы [О программе] и [Спросить]. Вы печатали адреса, содержащиеся в 'a' и' b' в компараторе? Почему нет? Пробовали ли вы использовать отладчик с точкой останова на компараторе? –
Обратите внимание, что ваш код будет иметь проблемы с вводом, где количество элементов в каждой строке не равно 3 (поэтому, если первая строка данных содержит '10 4', ваш код не будет обрабатывать размер 4 правильно). Это не сразу критично - ваш код, кажется, сбой, когда второй параметр равен «3» –
при вызове любого из семейства функций 'scanf()' всегда проверяйте возвращаемое значение (а не значения параметра), чтобы гарантировать операция была успешной. – user3629249