0

我在代码中遇到了分段错误错误,我不确定是什么原因造成的。更奇怪的是,当我在 gcc-4.4.6 RH6 中编译/运行时,我没有收到任何错误,但在其他编译器/Linux 发行版上,我收到了分段错误错误。

这是我认为可能会产生问题的部分代码片段:

int BIN_SIZE=(2*width)/bins;
//binCounts and binCounts2 store the fragment counts in each bin. mask=1 flags histone modification site

float **binVals;

binVals = (float **)malloc(chromNum*sizeof(int *));
//Initialize the arrays
totalBinNum = 0;

for (i=0;i<chromNum;i++)
{
    totalBinNum += chromInfo[i].chromSize/BIN_SIZE+1;
    binVals[i] = (float *)malloc((chromInfo[i].chromSize/BIN_SIZE+1)*sizeof(float));
    memset(binVals[i], 0, (chromInfo[i].chromSize/BIN_SIZE+1)*sizeof(float));
}

如果您知道一些可能导致错误的简单方法,请告诉我?否则它也可能在代码的其他部分导致不是智能 Q :(

4

1 回答 1

1

这样做会更精确:

binVals = malloc(chromNum*sizeof(float *));

但这不太可能是错误的原因,因为您可以预期 2 个指针,即使指向不同的类型int*float*,也将具有相同的大小。简而言之,错误的来源可能在您的代码中的其他地方。

其他一些建议:

  1. 我建议删除其他 malloc 中的其他类型。
  2. 我会使用一些临时变量来存储chromInfo[i].chromSize/BIN_SIZE+1,这样您就不必重复表达式 3 次,很可能会出现剪切和过去的错误。
  3. 您可以一次调用将malloc和压缩memset为零。calloc
于 2013-07-15T22:39:05.807 回答