這段代碼有問題。 它按預期工作,除了最終得到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 2014-12-07 16:27:11
嘗試在其上運行valgrind ...你可能會把內存弄得一團糟 另外,爲什麼nrP是一個指向int的指針,如果你永遠不改變它的值? – Antzi 2014-12-07 16:27:30
@Antzi與Valgrind的運行顯示了相同的: 過程與信號11(SIGSEGV)的默認操作終止 == 15484 ==訪問未映射區域內的地址0x0 == 15484 ==在爲0x1:??? HEAP內容: == 15484 ==在使用中在出口處:390個字節的10個塊 == 15484 ==總堆的使用情況:10個allocs,0的FreeS, 分配390個字節 == 15484 == == 15484 == LEAK SUMMARY: == 15484 ==絕對丟失:390個字節在10個塊中 – 2014-12-07 16:28:23