zoukankan      html  css  js  c++  java
  • 由malloc和new引发的段错误

    class Queue{

        private:

          struct node{

              string data;

              struct node * next,*priv;

        }

        private:

          struct node * pthread;

    }

    当我给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 仅仅给分配一堆指针的空间是没有意义的,所以在应用的时候会出现段错误。
  • 相关阅读:
    UVa11218 KTV
    counting sort 计数排序
    Uva10474
    Uva110 Meta-Loopless Sorts
    Uva592 Island of Logic
    Qtwebkit flashplayer插件问题
    C++程序员的javascript教程
    Binary Search
    排列组合生成算法
    【Linux】mkdir命令
  • 原文地址:https://www.cnblogs.com/zhaosc-haha/p/5088141.html
Copyright © 2011-2022 走看看