问题出现在用链表实现约瑟夫环时
#include<iostream>
#include<string>
using namespace std;
struct Person
{
string name;
};
struct Node
{
Person data;
Node* next;
};
int main()
{
Node* s = (Node*)malloc(sizeof(Node));
cin>>s->data.name;
cout << s->data.name;
return 0;
}
用malloc生成节点指针s后尝试给data的name赋值时程序会崩溃“引发了异常: 写入访问权限冲突。 _Left 是 0xCDCDCDCD”
但将Node* s = (Node*)malloc(sizeof(Node));改成Node*s=new Node;后再给string赋值时就程序就可以运行了
原因是在初始化栈时使用了malloc,而栈的自定义对象中有string而malloc只是分配内存,并不进行初始化,不调用类的构造函数,所以会出现错误都是因为string对象的构造函数没有被调用,没有构建string对象,或者理解为产生了一个string对象但我们没办法有效的操作这段内存(cin会调用string中的一些内容但string此时并没有赋初值构造出来所以尝试用cin改变其中的内容时程序会崩溃)所以无法对string对象进行赋值;同样,data也无法完成赋值。