Search code examples
carrayspointersvalgrind

Valgrind Invalid read of size 4 segfault


For an project assignment, I have this following variable from an prototype function which is not allocated.

int **suff;

This variable will receive a pointer to an array (int *) from a function which will generated an array of (int) from a FILO list (file).

(p is just a content structure, p->suff is a file)

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);

Now, when I want to print the array, valgrind raise a "invalid read of size 4"

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

My question is, what I did wrong in order to access to the int value of the array?

Note : I can't change the int **suff


Solution

  • The problem is *suff[i]. The way operator precedence works, that does suff[i] first and then dereferences whatever it finds there. You want to do it the other way round, so add brackets:

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