关于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相遇时, 容易出错
上一篇: C++字符串的截取,切割
下一篇: 自定义myhbati以及类加载器