You are still ignoring one warning (unused variable d).

Also, this is a strange comment:

// the error does not occur because I did not reserve space for the object with malloc.
Why do you malloc one random node when you store all the others on the stack?
You could just say:
Code:
  node inner_1 = {2, &inner_3, 1, &inner_4, 0};
(I don't understand why inner_1's value would be 2 when all the other inner nodes are 0.)

I'm not sure what you mean by "edge", but if you mean left child or right child, then you aren't setting them correctly.
Code:
.                     root
           i1                      i2
     i3          i4          i5          i6
   a    b      c    d      e    f      g    h
If you do mean left and right child, another possibility is to use a parent pointer.
Code:
#include <stdio.h>
#include <stdlib.h>

typedef struct Node{
  int value;
  struct Node* left, *right, *parent;
} Node;

void print_tree(Node* node){
  if (node) {
    printf("%d ", node->value);
    if (node->parent)
      if (node->parent->left == node)
        printf("left");
      else
        printf("right");
    else
      printf("root");
    putchar('\n');
    print_tree(node->left);
    print_tree(node->right);
  }
}

int main(){
  Node a = {1, NULL, NULL, NULL};
  Node b = {2, NULL, NULL, NULL};
  Node c = {3, NULL, NULL, NULL};
  Node d = {4, NULL, NULL, NULL};
  Node e = {5, NULL, NULL, NULL};
  Node f = {6, NULL, NULL, NULL};
  Node g = {7, NULL, NULL, NULL};
  Node h = {8, NULL, NULL, NULL};

  Node inner_3 = {0, &a, &b, NULL};
  Node inner_4 = {0, &c, &d, NULL};
  Node inner_5 = {0, &e, &f, NULL};
  Node inner_6 = {0, &g, &h, NULL};

  a.parent = b.parent = &inner_3;
  c.parent = d.parent = &inner_4;
  e.parent = f.parent = &inner_5;
  g.parent = h.parent = &inner_6;

  Node inner_1 = {0, &inner_3, &inner_4, NULL};
  Node inner_2 = {0, &inner_5, &inner_6, NULL};

  inner_3.parent = inner_4.parent = &inner_1;
  inner_5.parent = inner_6.parent = &inner_2;

  Node root = {0, &inner_1, &inner_2, NULL};

  inner_1.parent = inner_2.parent = &root; 

  print_tree(&root);

  return 0;
}