newやmallocの確保は、解放しない限り残るんですよね そのアドレスは参照で受け取っているので問題ないと思うのですが
参照渡しにしてもだめです

f(strdata *zzz){ printf("%s",*(zzz->st)); }

main(){
strdata str;
strconstconv(&str, "abcdefgh");
f(&str); }