У меня есть проблема с этим кодом. Работает так, как ожидалось, за исключением того, что в конце появляется ошибка Seg.Ошибка сегментации в конце программы
Вот код:
void distribuie(int *nrP, pach *pachet, post *postas) {
int nrPos, k, i, j;
nrPos = 0;
for (k = 0; k < 18; k++)
pos[k].nrPac = 0;
for (i = 0; i < *nrP; i++) {
int distributed = 0;
for (j = 0; j < nrPos; j++)
if (pac[i].idCar == pos[j].id) {
pos[j].vec[pos[j].nrPac] = pac[i].id;
pos[j].nrPac++;
distributed = 1;
break;
}
if (distributed == 0) {
pos[nrPos].id = pac[i].idCar;
pos[nrPos].vec[0] = pac[i].id;
pos[nrPos].nrPac = 1;
nrPos++;
}
}
for (i = 0; i < nrPos; i++) {
printf("%d %d ", pos[i].id, pos[i].nrPac);
for (j = 0; j < pos[i].nrPac; j++)
printf("%d ", pos[i].vec[j]);
printf("\n");
}
}
и вызов этой функции в основной().
Запуск с помощью GDB в результате этой ошибки:
Program received signal SIGSEGV, Segmentation fault.
0x00000001 in ??()
Вы сделали обратную трассировку на этой сессии 'gdb'? – WhozCraig
Попробуйте запустить valgrind на нем ... вы, вероятно, беспорядок с памятью где-то Кроме того, почему nrP является указателем на int, если вы никогда не измените его значение? – Antzi
@Antzi Бега с Valgrind показывает тот же: Процесса прекращения действия по умолчанию с сигналом 11 (SIGSEGV) == 15484 == Доступа не в пределах отображенной области по адресу 0x0 == 15484 == в 0x1: ??? НЕАРА РЕЗЮМЕ: == 15484 == в использовании на выходе: 390 байт в 10 блоках == 15484 == общего использования кучи: 10 ALLOCS, 0 высвобождает, 390 байт, выделенных == 15484 == == 15484 == LEAK SUMMARY: == 15484 == определенно потеряно: 390 байт в 10 блоках –