使用一个gcc编译器编译但不与其他gcc编译器编译时出现分段错误错误

时间:2013-07-15 22:11:46

标签: c gcc segmentation-fault

我在代码中遇到了分段错误错误,我不确定是什么导致它。更奇怪的是,当我运行时,我在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 :(

1 个答案:

答案 0 :(得分:1)

这样做会更精确:

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

但这不可能是导致错误的原因,因为您可以预期2个指针(即使是不同类型int*float*)的大小也相同。简而言之,错误的来源可能是您代码中的其他位置。

其他一些建议:

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