欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

关于malloc无法申请string类的问题

程序员文章站 2022-07-14 11:57:46
...

关于malloc无法申请string类的问题

今天在写二叉排序树的时候,发现有个小问题总是Runtime Error,是关于结构体中string和mllloc相遇的问题。我在二叉树中存的数据是string类型的,但在申请内存是调用了malloc来申请内存,导致报错,换成new之后就解决问题了。

typedef struct node {
    string date;
    int cnt;
    struct node *l;
    struct node *r;
}ty;

    if ( root==NULL ) {
        //root = (ty*)malloc(sizeof(ty)); 这样会Runtime Error
        root = new ty;
        root -> date = s;
        root->l=root->r=NULL;
        root->cnt = 1;
    }

在学习C语言的时候, 我们学了malloc, 后来学习C++的时候, 又学了new, 那么malloc和new有什么区别呢?

        首先, malloc是一个库函数, 返回值是void *形式的, 而new是一个运算符, 返回值类型与new的对象/变量的指针相同。

        其次, new和delete的实现实际上是调用了malloc/free的。

        最后, 介绍最重要的, 对于非内部类型来说, malloc是不能满足要求的, 因为malloc只是分配堆内存(不会调用构造函数), 而new是分配且内存且在此创建一个对象(会调用构造函数)。
参考博客:聊聊malloc和new的区别---当malloc和string相遇时, 容易出错

 

相关标签: 小知识点