睡累了就学会 2024-09-20 16:43 采纳率: 100%
浏览 10
已结题

c++关键字delete出现未知信号

#include <iostream>
template <class T>
class Vector{
public:
    typedef T value_type;
    typedef T * iterator;
    typedef size_t size_type;

private:
    value_type * data;
    size_type size;
    size_type totalSize;

public:
    //  default constructor(empty)
    Vector(void):data(nullptr),size(0),totalSize(0){};
    // deconstructor
    ~Vector(void){
        delete[] data;
        data = nullptr;
    }
    // expansion
    void expansion(size_type val){
        if (val <= totalSize){
            return;
        }
        value_type * temp = new value_type(val);
        for (size_type i = 0; i < size; ++i){
            temp[i] = data[i];
        }
        delete[] data;
        data = temp;
        totalSize = val;
    }
// modifiers
public:
    void push_back(value_type val);
};

template <class T>
void Vector<T>::push_back(value_type val){
    if (totalSize == 0){
        size = totalSize = 1;
        data = new value_type(totalSize);
    }
    else if (size + 1 > totalSize){
        this->expansion(totalSize * 2);
    }
    data[size] = val;
    size++;
}


int main(){
    Vector<int> vec;
    vec.push_back(10);
    vec.push_back(20); 
}

img


断点调试到该处时出现未知信号,一直找不到问题出在哪里。

  • 写回答

2条回答 默认 最新

  • micthis 2024-09-20 17:39
    关注

    push_back函数当totalSize=0时,不应将size设置成1。

    #include <iostream>
    #include <cassert>
    
    using namespace std;
    
    template <class T>
    class Vector{
    public:
        typedef T value_type;
        typedef T * iterator;
        typedef size_t size_type;
    private:
        value_type * data;
        size_type size;
        size_type totalSize;
    public:
        //  default constructor(empty)
        Vector(void):data(nullptr),size(0),totalSize(0){};
        // deconstructor
        ~Vector(void){
            delete[] data;
            data = nullptr;
        }
        // expansion
        void expansion(size_type val){
            if (val <= totalSize){
                return;
            }
            value_type * temp = new value_type(val);
            for (size_type i = 0; i < size; ++i){
                temp[i] = data[i];
            }
            delete[] data;
            data = temp;
            totalSize = val;
        }
    // modifiers
    public:
        void push_back(value_type val);
    };
    template <class T>
    void Vector<T>::push_back(value_type val){
        if (totalSize == 0){
            /*size = */totalSize = 1;
            data = new value_type(totalSize);
        }
        else if (size + 1 > totalSize){
            this->expansion(totalSize * 2);
        }
        assert(size<totalSize);
        data[size] = val;
        cout<<data[size]<<",";
        size++;
    }
    int main(){
        Vector<int> vec;
        vec.push_back(10);
        vec.push_back(20);
        vec.push_back(30);
        vec.push_back(40);
        vec.push_back(50);
        return 0;
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 9月28日
  • 已采纳回答 9月20日
  • 创建了问题 9月20日