首页 > 解决方案 > 结构和向量的 C++ 奇怪行为

问题描述

当我运行代码时:

#include <iostream>
#include <vector>

using namespace std;

struct A_s {
    int *arr;
    unsigned int l;

    A_s(unsigned int size) : l(size) {
        arr = new int[size];
        cout<<'\t'<<arr<<endl;
    }

    ~A_s() {
        delete[] arr;               // works if line is removed
    }
};

vector<A_s> vec;

int main() {
    cout<<"vec 0"<<endl;
    vec.emplace_back(1);

    cout<<"vec 1"<<endl;
    vec.emplace_back(1);

    cout<<"vec 2"<<endl;
    vec.emplace_back(1);

    for(unsigned int i = 0; i < vec.size(); i++) cout<<&vec[i]<<endl;

    cout<<"end"<<endl;
    return 0;
}

输出是:

vec 0
        0x761710
vec 1
        0x761a90
vec 2
        0x761ab0
mingw32-make: *** [Makefile:6: run] Error -1073740940

如果我删除该行,程序运行不会出错delete[] arr。析构函数是否在程序结束前被调用?即使确实如此,为什么会导致错误?

标签: c++classmemoryvectorstruct

解决方案


推荐阅读