VCCやGCCやDMCでも実行中にエラーになります

#include <stdio.h>
#include <stdlib.h>
typedef struct { char **st; }strdata;

void f(strdata *q){
char *ch=(char *) malloc(10);
ch[0]='X';ch[1]='Y';ch[2]='Z';ch[3]=0;
q->st=&ch; }

int main(){
strdata str;
char *test;
f(&str);
test=(char *)malloc(1);
printf("%s",*(str.st));
getchar(); return 0;}