タブスペースで書き込んじまった

int main() {
 char* str1[10];   //定義しただけで初期化していない。つまり文字列は格納されていない。

 func1( &str );
}


void func1( char* str ) {
 char* inStr = "test";
 inStr = anotherFunc() ;
 str = inStr + 1 ;
 return ;
}
 

質問なんだが。
なぜ、きちんとstrに文字データが格納されるんだろうか?

main 関数でstr のポインタ領域は確保されているが、その参照先の文字列領域は未確保。
func1にとんだ先では、自動変数inStr に文字列が格納されており、そのポインタを渡すことでstrの中身に具体的なポインタが入る。
func1内では、str のポインタの指し示す先は自動変数inStrと同じポインタであり、参照できて当然。

ところが、return すると、自動変数inStr の内容はスタックを戻すことにより開放されている。
return された後にmainにてstrを参照しても全く問題ないし、キチンと値が格納されている。

値が参照できるのは、たまたまナノか?
この操作は問題ない?