难过怪 2021-01-26 22:06 采纳率: 100%
浏览 82
已采纳

c++中new可以实现的换用为什么malloc会报错

DuLNode *p = new DuLNode;//使用这句可以正确执行,而使用下面的语句无法执行
//DuLNode *p = (DuLNode *)malloc(sizeof(DuLNode));

使用第一句可以顺利执行,下面一句会报错,除这两句之外无任何差别

  • 写回答

2条回答 默认 最新

  • upc_hxc 2021-01-27 00:55
    关注

    理论上来讲,只有第二句进行指针赋值的话,是不会有问题的,毕竟等号左右都只是一个指针。

    但是如果后续用类的指针进行赋值等操作时,就有可能出现问题。例如,若DuLNode 类中有string类型的成员变量s,在用new申请内存时,new会调用构造函数对变量s进行必要的初始化,会将为s分配的最后一个字节的内存设置为'\n',使得变量s可以正常进行赋值和读取。但是,如果是用malloc申请的内存,返回的是一个void*的原始内存块,内部没有做任何初始化,即使强制转换为(DuLNode*),其本质还是原始内存块,在对变量s进行操作时,就会报错。

    此外,用malloc申请内存时,需要指定内存大小,申请后得到的就是一个固定大小的内存。而用new申请的std::string类型的内存,程序会根据需要进行重新申请和分配内存。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 使用EMD去噪处理RML2016数据集时候的原理
  • ¥15 神经网络预测均方误差很小 但是图像上看着差别太大
  • ¥15 Oracle中如何从clob类型截取特定字符串后面的字符
  • ¥15 想通过pywinauto自动电机应用程序按钮,但是找不到应用程序按钮信息
  • ¥15 如何在炒股软件中,爬到我想看的日k线
  • ¥15 seatunnel 怎么配置Elasticsearch
  • ¥15 PSCAD安装问题 ERROR: Visual Studio 2013, 2015, 2017 or 2019 is not found in the system.
  • ¥15 (标签-MATLAB|关键词-多址)
  • ¥15 关于#MATLAB#的问题,如何解决?(相关搜索:信噪比,系统容量)
  • ¥500 52810做蓝牙接受端