编译连接都没问题,但是运行到一半强制结束了运行,为什么啊?

typedef struct sqstring
{
char *ch;//没有分配空间吧
int length;
}HString;
void StrAssign(HString &str, char ch[])
{
int i=0;
while(ch[i]!=0)i++;
str.ch=new char[i+1];
for(i = 0; ch[i] != '\0'; i++)
{
str.ch[i] = ch[i];
}
str.ch[i]=0;
str.length = i+1;
}