带有icd指针的C代码中的Valgrind错误

时间:2018-02-16 13:12:45

标签: c memory malloc valgrind

我继承了C代码..其中一行是在下面。这里的icd是什么意思。它是关键字还是名称。我无法在谷歌的任何地方找到它。

icd **d1cols = (icd**)malloc(measquant*sizeof(icd *));

我有:

for(i=0; i<measquant; i++){
    *(d1cols + i) = getwtOnAFileColReturnDouble1(fp1, fp2, xx, yy);
}

如果我打印以下行

printf("Test 0,0 weight=%.3le\n",*((*(d1cols + 0 ))->wt+0));

我在valgrind中遇到的错误包括其他错误:

  

读取大小为8

     

== 45918 ==在0x401945:main(getwtmeasAll_1_main.c:143)
  == 45918 ==地址0x7e83850是一个大小为896的块内的0字节免费

     

== 45918 ==在0x4C27430:免费(vg_replace_malloc.c:446)

这里有什么问题。

1 个答案:

答案 0 :(得分:2)

看起来代码正在尝试读取已经解除分配的部分内存( free'd )。

icd是由您的代码使用的库定义的数据结构。没有额外的细节,没有更多的话要说。