这段代码有问题。 它按预期工作,除了最终得到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