我在代码中遇到了分段错误错误,我不确定是什么导致它。更奇怪的是,当我运行时,我在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 :(
答案 0 :(得分:1)
这样做会更精确:
binVals = malloc(chromNum*sizeof(float *));
但这不可能是导致错误的原因,因为您可以预期2个指针(即使是不同类型int*
和float*
)的大小也相同。简而言之,错误的来源可能是您代码中的其他位置。
其他一些建议:
chromInfo[i].chromSize/BIN_SIZE+1
,这样您就不必重复表达式3次,很可能会出现剪切和过去错误。malloc
来电中将memset
和calloc
压缩为零。