关于malloc无法申请string类的问题
关于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是分配且内存且在此创建一个对象(会调用构造函数)。 参考博客:
上一篇:
通过多线程提高代码的执行效率例子
下一篇:
自学Java很困难?那是你没找到方法