由malloc和new引起的段错误

class Queue{node

    private:mvc

      struct node{函数

          string data;指针

          struct node * next,*priv;对象

    }内存

    private:get

      struct node * pthread;编译器

}string

当我给struct node 分配一块新内存时编译

struct node * pnew

pnew = (struct node *)malloc(sizeof(struct node));

此时应用pnew指针就会出现段错误,而在编译的时候是没有办法检测出来的。

正确应用是

struct node * pnew

pnew = new node ;

缘由就在于 

对象在建立的同时要自动执行构造函数,对象在消亡以前要自动执行析构函数。因为malloc/free是库函数而不是运算符,不在编译器控制权限以内,不可以把执行构造函数和析构函数的任务强加于malloc/free,因此malloc仅仅是分配一块连续内存,而string 仅仅给分配一堆指针的空间是没有意义的,因此在应用的时候会出现段错误。
相关文章
相关标签/搜索