C++代码求解,该怎么处理

C++代码求解
一时无聊拿C++写了个单链表。但是遇到一个不能理解的错误。
结构体定义如下:
typedef struct numbers
{
std::string str;
struct numbers *next;
}node;

创建链表的函数如下:
struct numbers * creator()
{
node *head = NULL, *new1, *tail;
bool isFirst = true;

cout<<"输入一些字符串(作为内容):";
for( ; ; )
{
new1 = (struct numbers *)malloc(LEN);
cin>>new1->str;
if(new1->str == "0")
{
free(new1);
break;
}
new1->next = NULL;
if(isFirst)
head = new1;
else
tail->next = new1;
tail = new1;
isFirst = false;
}
cout<<"链表创建成功"<<endl;
return head;
}
但是每次执行创建时总是莫名其妙的弹出xx.exe已停止工作,而且是一执行该函数就这样,求大神帮我看看到底是个什么玩意在装怪

------解决方案--------------------
new1 = (struct numbers *)malloc(LEN);  --->
new1 = new  node;
------解决方案--------------------
有兴趣的话可以移步看下我的有关所有链表的C++实现,全部源码,注释清晰,欢迎阅读:
http://blog.csdn.net/zlhy_/article/details/8518699
------解决方案--------------------
这句代码中
new1 = (struct numbers *)malloc(LEN);
的malloc只进行了内存分配,并未为其中的string掉用构造函数,虽然你对申请的内存进行了(struct numbers *)的强制转换,但是string类型的str并未被进行有效构造,所以你下面使用cin对str进行赋值的时候会出现问题。
如果你采用C++而不是C的习惯将malloc修改为new,上述问题就会解决。这里涉及到c++中new的一些内幕,例如operater new 之类的,建议你了解下。

另外,关于编程习惯方面,有个建议:定义指针的时候,尽量都要给它赋初值NULL。例如这两个*new1, *tail就没有这么做


------解决方案--------------------
这个函数里有两个问题:
1. new1 = (struct numbers *)malloc(LEN);这里先不说LEN定义的是多少,估且就算是sizeof(struct numbers),如6楼所写,这里只是分配了内存没有调用std::string的构造函数,这时操作成员变量str是很危险的,程序不挂的概率比彩票中五百万还低,可修改成new1=new numbers;注意最后判断返回的new1是不是NULL。
2. 指针tail在使用前未初始化,达不到代码预期的以tail指针指向链表最后一个元素的目的,需要修改if(isFirst)分支如下:
if(isFirst)
{
    head = new1;
    tail = new1;
}