Segfault尝试访问阵列

时间:2013-09-15 11:37:17

标签: c++ arrays segmentation-fault

我正在尝试跟踪特定的计数器,因为我经历了一系列循环。

基本上我正在循环一些输入文件,在此期间对每个文件进行一些计算。在文件循环之外,我已经声明了一个数组来跟踪一组特定的整数,这些整数对于第一个文件都是零,但随着连续文件的计算完成后也会被添加。当我尝试更新这个“跟踪器阵列”时,除了第一个文件runthrough之外,所有内容都会中断(每个文件有几个元素)。请参阅以下代码:

有问题的数组最初是在这里初始化的:

int* TempRowLength = new int[PrimeDatL];
for(int i=0;i<PrimeDatL;i++){
  TempRowLength[i]=0; 
}

并且segfault发生在以下部分中:

int tempArrayN;
cout<<"Begin pHi2 comp:"<<endl;
for(int j=0;j<PrimeDatL;j++){
  int i=0;
  tempArrayN=TempRowLength[j]+1;
  cout<<tempArrayN<<endl;
  while(i<PHLengths[n]) {   
    tempArray1[0][j]=PrimeDat1[j];
    if(pHi1[0][i]==PrimeDat1[j]&&tempArrayN-1<PrimeDat2[j]) {
      tempArray1[tempArrayN][j]=pHi1[1][i];
      tempArrayN++;
    }
    i++;
  }
  TempRowLength[j]=TempRowLength[j]+tempArrayN;
}

当我包含最后一行时,我会增加TempRowLength的值,从而发生错误。如果此声明更早发生,则不会发生这种情况,但这会使其无效。此外,它只发生在'j'的几次迭代之后(j = 6导致错误)。

我有点不知所措,我已经宣布了阵列并将记忆留在了我需要它的地方,但显然我已经用指针在某处乱了。

所有帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

听起来你某处有内存问题,可能是缓冲区溢出。最简单的选择可能是使用valgrind来查明问题。