c++ - 如何正确删除指向 C++ 结构中数组的指针?
问题描述
我正在从 Stroustrop 的A Tour of C++ 2E 中学习 C++,并且正在玩弄他的示例。
我有一个 struct Vector
,它的成员elements
是一个指向双精度数组的指针。我正在尝试使用delete[]
分配的数组new[]
,但即使没有编译或运行时错误,该数组似乎也不会被删除。这里发生了什么?
#include <iostream>
struct Vector {
int size;
double* elements;
};
void print_array(double* first, int size) {
double* cursor = first;
for (int i = 0; i < size; ++i) {
std::cout << *cursor << " ";
++cursor;
}
std::cout << "\n";
}
int main() {
Vector v;
v.size = 5;
v.elements = new double[5];
for (int i = 0; i < v.size; ++i) {
v.elements[i] = 9-i;
}
print_array(v.elements, v.size);
delete[] v.elements;
std::cout << "v.elements==nullptr ? " << (v.elements==nullptr) << "\n";
print_array(v.elements, v.size);
return 0;
}
我得到的输出是:
9 8 7 6 5
v.elements==nullptr ? 0
9 8 7 6 5
我还不知道如果我打印出一个已删除的数组会发生什么,但我很困惑为什么输出中的第三行会发生。提前致谢。
解决方案
推荐阅读
- swift - 在 iOS(Swift) 上访问照片,必须尝试两次才能显示图片库。第一次没出现,第二次出现了
- python - Flask 应用程序运行,但初始单元测试失败
- java - Hippo CMS - 超出 GC 开销限制
- selenium - 运行 Capybara Specs 只能运行一次;之后,工厂出现问题
- jenkins - 当 xUnit 测试未通过时 Jenkins 构建失败
- angular - AOT Angular 2 忽略库
- javascript - How to add a preloader to an iframe that its src changes dynamically?
- python - 如何在单独的列表中拆分字符串中的每个单词
- ios - How to override Alamofire SessionManager to modify response in order to add headers?
- java - FragmentPagerAdapter 的第二个片段中的访问受限