Valgrind大小为4的段错误读取无效

问题描述 投票:0回答:1

对于项目分配,我有一个未分配的原型函数中的以下变量。

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个回答
1
投票

问题是*suff[i]。运算符优先级的工作方式是先执行suff[i],然后再解除对其中引用的引用。您想反过来做,所以加括号:

  for (int i = 0; i < t; i++) {
    printf("%d --  ", (*suff)[i]);
  }
© www.soinside.com 2019 - 2024. All rights reserved.