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

使用一个gcc编译器但不使用其他gcc编译器时出现分段错误,c,gcc,segmentation-fault,C,Gcc,Segmentation Fault,我在我的代码中遇到了一个分段错误,我不确定是什么导致了它。更奇怪的是,当我在gcc-4.4.6 RH6中运行compile/run时,我没有得到任何错误,但在其他编译器/linux发行版上,我得到了一个分段错误 以下是我认为可能产生问题的部分代码片段: int BIN_SIZE=(2*width)/bins; //binCounts and binCounts2 store the fragment counts in each bin. mask=1 flags histone modific

我在我的代码中遇到了一个分段错误,我不确定是什么导致了它。更奇怪的是,当我在gcc-4.4.6 RH6中运行compile/run时,我没有得到任何错误,但在其他编译器/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));
}
int BIN_SIZE=(2*宽度)/BIN;
//binCounts和binCounts2在每个箱子中存储碎片计数。mask=1标记组蛋白修饰位点
浮动**binVals;
binVals=(float**)malloc(chromNum*sizeof(int*);
//初始化数组
totalBinNum=0;

对于(i=0;i而言,这样做更精确:

binVals = malloc(chromNum*sizeof(float *));
但这不太可能是错误的原因,因为您可以预期,即使指向不同类型的
int*
float*
的两个指针大小相同。简而言之,错误的来源可能在代码的其他地方

其他一些建议:

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

  • malloc(chromNum*sizeof(int*);
    我看不到这里的
    int*
    。这不是一个直接的答案,但在Linux上,使用调试信息('-g')编译、使用GDB运行程序以及使用“backtrace”命令(如果需要)很容易.我会试试看,因为如果你知道错误发生在哪一行,就更容易找出你做错了什么。:)你试过valgrind吗?并不是说我不相信你的代码,但我看到的最有可能出现分段错误的地方是当您的
    chromInfo
    没有正确初始化为size
    chromNum
    。或者更好的情况是:
    binVals=malloc(chromNum*sizeof*binVals)我仍然得到seg错误,我想它可能在代码的另一部分。。。谢谢。他有
    int*
    ,而不是
    int
    。很可能
    float*
    int*
    的大小相同。@CarlNorum你说得对,我已经编辑了我的answer@Dnaiel:是,我确认:代码可以改进,但没有明显的分段错误原因:它必须在代码的其他地方触发。