【问题标题】:Valgrind Invalid read of size 4 segfaultValgrind 无效读取大小为 4 的段错误
【发布时间】:2019-12-14 21:27:18
【问题描述】:

对于项目分配,我从未分配的原型函数中获得以下变量。

int **suff;

此变量将从一个函数接收指向数组 (int *) 的指针,该函数将从 FILO 列表(文件)生成 (int) 数组。

(p只是一个内容结构,p->suff是一个文件)

int t = file_size(p->suff);

/* Prototype of file_tabint is
 * int * file_tabint(file *p, int * psize)
 */

// Assign the generated array to the *suff)

  *suff = file_tabint(p->suff, &t);

现在,当我想打印数组时,valgrind 会引发“大小为 4 的无效读取”

  for (int i = 0; i < t; i++) {
    printf("%d --  ", *suff[i]);
  }

我的问题是,为了访问数组的 int 值,我做错了什么?

注意:我无法更改 int **suff

【问题讨论】:

    标签: c arrays pointers valgrind


    【解决方案1】:

    问题是*suff[i]。运算符优先级的工作方式是先执行suff[i],然后取消引用它在那里找到的任何内容。你想反过来做,所以添加括号:

      for (int i = 0; i < t; i++) {
        printf("%d --  ", (*suff)[i]);
      }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-03
      • 1970-01-01
      • 1970-01-01
      • 2014-05-12
      • 1970-01-01
      • 2015-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多