プログラミング zroff 警告: 関数がローカル変数のアドレスを返しています

ウンコな間違い

#include <stdio.h>

char *message(void)
{
  char message[] = "Hello";
  return message;
}

int main(void)
{
  char *m = message();
  printf("%s\n", m);
  return 0;
}

警告: 関数がローカル変数のアドレスを返しています
あたりまえすぐる。
returnされた時点で、messageは死んでるのに
こんな事も忘れているとは...

char *message(void)
{      
          char *message;

          message = (char *)malloc(20);
          message = "hello";
            return message;
}

int main(void)
{
          char *m = message();
            printf("%s\n", m);
              return 0;
}

mallocは大丈夫