C++中链表初始化

2025-01-20 06:01:43
推荐回答(3个)
回答1:

p1=p2=(Cwow *)malloc(sizeof(Cwow));

问题出在这一句,这里只是负责分配一个空间大小sizeof(Cwow)的堆内存给p1.这块内存的数据是没有经过初始化的。

所以当你调用p1->name时就会报错,因为string name的内容是随机的。

解决办法有两个:

  1. 使用new操作符,  p1 = p2 = new Cwow;

  2. 在p1=p2=(Cwow *)malloc(sizeof(Cwow));后面增加一句,memset(p1, 0 ,sizeof(Cwow));

 

建议使用第一种方法,使用new操作符,会自动调用string的默认构造函数。

回答2:

结构体中

typedef struct Cwow
{
string name;
string sex;
string profession;
struct Cwow * next;
}Cwow;

string是C++的东西。

而这里

p1=p2=(Cwow *)malloc(sizeof(Cwow));


malloc是纯c的东西,如此混用当然出异常,请改为new:

p1=p2=new Cwow;

这样就好了,所有用malloc的地方都该为new

回答3:

#include "iostream"
#include "string"
using namespace std;

typedef struct Cwow
{
string name;
string sex;
string profession;
struct Cwow * next;
}Cwow;

void main()
{
Cwow *creat();
creat();
}

Cwow *creat()
{
Cwow *head;
Cwow *p1,*p2;
string name,sex,profession;
p1=p2=(Cwow *)new Cwow;//////////////////////////////////////////这里
head=NULL;
cout<<"Please input the person's name:";
cin >>name;
cout<<"Please input the person's sex:";
cin >>sex;
cout<<"Please input the person's profession:";
cin >>profession;
p1->name=name;
p1->sex=sex;
p1->profession=profession;
if (p1->name!="")
head=p1;
while(p1->name!="")
{
p1=(Cwow *)new Cwow;///////////这里
cout<<"Please input the person's name:";
cin >>name;
cout<<"Please input the person's sex:";
cin >>sex;
cout<<"Please input the person's profession:";
cin >>profession;
p1->name=name;
p1->sex=sex;
p1->profession=profession;
p2->next=p1;
}
p1->next=NULL;
return head;
}