请问大佬这个问题怎么回事啊?当输入插入的位置时,vs会出现未知错误,是不是编码有问题啊?

#include
#include
using namespace std;
struct Node{
Node *next;
string data;
};
class Astring{
Node*Head;
public:
Astring();
void Create(int);
void Insert(int);
void show();
~Astring();
};
Astring::Astring(){
Head = new Node;
Head->next = NULL;
}
Astring::~Astring(){
Node*p;
while (Head){
p = Head;
Head = Head->next;
delete p;
}
}
void Astring::Create(int m){
Node *t, *p;
p = Head;
string k;
for (int i = 0; i < m; i++){
t = new Node;
cin >> k;
t->data = k;
t->next = p->next;
p->next = t;
}
cout << "输入完毕!" << endl;
}
void Astring::Insert(int m){
Node*p;
Node*o;
string e;
p = Head;
for (int i = 0; i <= m; i++)
{
p = p->next;
}
o = new Node;
cin >> e;
o->data = e;
o->next = p->next;
p->next = o;
}
void Astring::show(){
Node*p;
cout << "链表输出为:" << endl;
while (Head->next != NULL)
{
p = Head;
Head = Head->next;
cout << Head->data << endl;
delete p;
}
cout << "输出完毕!!!" << endl;
}
int main(){
Astring L;
int i;
cin >> i;
L.Create(i);
L.show();
int m;
cin >> m;
L.Insert(m);
L.show();
return 0;
}

int main(){
Astring L;
int i;
cin >> i;
L.Create(i);
L.show(); // 注意: 这个地方你已经把产生的数据释放了。此时Haed是NULL,
int m;
cin >> m;
L.Insert(m); // 此时调用时,Head是NULL,因此会出现异常。 问题不是insert函数,而是在 show,
// show中显示完成后同时释放了数据,只要把前面的L.show()删除掉就可以了

p = p->next;改一下,弄个中间量找下一个

p = p->next需要判断p->next是否为NULL,如果为NULL的话会引起异常

for (int i = 0; i <= m; i++)
{
p = p->next;
}

if (p == NULL)
{
cout << "插入失败!!!" << endl;
return;
}

因为在你的初始化函数Init()中,*p是一个node 指针,并没有任何属性,这时候你还用cin>>p->next,一定会出错,你需要new一下
Node*p = new Node;