c++ - 结构和向量的 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
。析构函数是否在程序结束前被调用?即使确实如此,为什么会导致错误?
解决方案
推荐阅读
- android - 如何获取 USB 存储设备的广播并在 Android 上访问它?
- javascript - 如何对齐侧边栏图标和标题上的徽标?
- python - python - 如何将一行的一部分移动到python pandas中的新行?
- python - 内置 Python 模块 sqlite3 是使用全局计算机的 sqlite3 共享库,还是静态链接?
- node.js - 用户必须选择登录时 MyApp 可以访问的内容 | 谷歌 OAuth 2
- asp.net-core - ASP.NET Core HostedService 在创建数据库之前尝试访问它
- ios - IOS Beta 13 CoreNFC NDEF Lock NFC tag with writeLock() Ask
- javascript - 在 Javascript 函数中调用其他函数
- terraform - 创建 webapp 运行时堆栈的 terraform 代码问题
- sql - 获取上一行值