zoukankan      html  css  js  c++  java
  • C++ new大小为零的数组

    在实现队列数据结构时,由于自己马虎出现了一个“堆破坏”的错误——其实就是new大小为零的数组了。

    症状:new后仍然能返回一个正常地址,并且对于该地址进行操作(入队列、出队列)均未出现问题。但是最后删除却报出堆破坏问题。

    原因:size不小心写成了m_size。对于数组,清楚地知道其大小不能为零,但是对于动态分配时却不是很了解。这个问题最终也让自己又学到了知识。

    部分源代码:
    template<typename T>
    class MyQueue
    {
    public:
    MyQueue( size_t size = MinSize );
    ~MyQueue();
    void push_back( T & e );
    void pop_front();
    size_t size();
    T &front();
    T &back();
    bool isempty();
    bool isfull();
    protected:
    private:
    const static size_t MinSize = 20;
    size_t m_capacity;
    size_t m_size;
    size_t m_front;
    size_t m_rear;
    T *m_elem;
    };
    template<typename T>
    MyQueue<T>::MyQueue( size_t size )
    {
    if( size < MinSize )
    size = MinSize;
    m_capacity = size;
    m_size = 0;
    m_front = 0;
    m_rear = -1;
    /* Error: 分配大小为零的数组,正确写法:new T[size] */
    m_elem = new T[m_size];
    }
  • 相关阅读:
    愚公移山
    唐雎不辱使命
    渡易水歌
    论语
    智子疑邻
    学弈
    SQL Merge 语法 单表查询
    大道之行也
    Java开发人员最常犯的10个错误
    模拟Spring手撕一个简单的IOC容器
  • 原文地址:https://www.cnblogs.com/miraclecoder/p/4051172.html
Copyright © 2011-2022 走看看