首页 > 解决方案 > 如何正确删除指向 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 

我还不知道如果我打印出一个已删除的数组会发生什么,但我很困惑为什么输出中的第三行会发生。提前致谢。

标签: c++arrays

解决方案


推荐阅读