【问题标题】:Valgrind error in C code with icd pointers带有 icd 指针的 C 代码中的 Valgrind 错误
【发布时间】:2018-07-27 09:50:10
【问题描述】:

我继承了一个 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:主 (getwtmeasAll_1_main.c:143)
==45918== 地址 0x7e83850 是一个大小为 896 的块内的 0 个字节已释放

==45918== at 0x4C27430: free (vg_replace_malloc.c:446)

这里有什么问题。

【问题讨论】:

  • 请提供一个完整的例子。目前还不太清楚143号线在哪里……
  • 也是一个最小的例子,因为很可能不是前面的 142 行都是相关的。
  • icd 是一种类型。
  • 谢谢。我将添加一个最小的示例。第 143 行是 printf 语句。任何有关 icd 的详细信息将不胜感激。

标签: c memory malloc valgrind


【解决方案1】:

看起来代码正在尝试读取已释放的一部分内存(free'd)。

icd 是由您的代码使用的库定义的数据结构。没有更多的细节,就没什么好说的了。

【讨论】:

  • 确实,该代码试图访问一个已经被释放的内存。我可以根据与以前版本的差异来计算。
猜你喜欢
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 2021-11-24
  • 2015-03-14
  • 2014-12-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多