malloc和new在使用时的困扰

问题出现在用链表实现约瑟夫环时

#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也无法完成赋值。
 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值