このコードはSegmentation Faultを起こしてしまうからです。

#include <stdio.h>

char **foo(void);

int main(void)
{
  char **p;
  int i;

  p = foo();

  for (i = 0; i < 3; i++) {
    printf("(%d): '%s'\n", i, *p++);
  }

  return(0);
}


char **foo(void)
{
  char **p;
  char *s, *t, *u;
  char *array[3];

  s = "foo";
  t = "bar";
  u = "foobar";

  array[0] = s;
  array[1] = t;
  array[2] = u;

  p = array;

  return p;
}