如何删除数组C ++?

时间:2013-02-17 17:46:42

标签: c++ arrays

如果我有结构:

typedef struct {
  unsigned char data[HEX_FLASH_BUFFER];
  bool isLoad;
  unsigned int length;
} s_hexFLASH;

typedef struct {
  s_hexFLASH flash;
} s_hexFile;

s_hexFile *hex = new s_hexFile;

如何删除整个结构? 因为当a做了这样的事情时:

delete[] hex->flash.data;

在此之后,我仍然能够读取数据:

cout << hex->flash.data[0] << endl;

5 个答案:

答案 0 :(得分:4)

unsigned char data[HEX_FLASH_BUFFER];定义了一个具有自动存储持续时间的固定长度数组,这意味着当解除分配结构对象时它将自动解除分配。

换句话说:您尚未拨打new[]进行分配,因此没有理由在其上调用delete[]

答案 1 :(得分:4)

您无需删除data,因为它不是首先动态分配的。 deletenew成对。所以请致电delete hex;

所有这一切,在现代C ++中,您基本上不会手动使用delete关键字。您可以使用智能指针shared_ptrunique_ptr来管理动态分配的内存。但是通常只使用本地(自动)变量。

另请注意:typedef struct { ... } name;应该只是struct name {...};。前者过​​时了。

答案 2 :(得分:1)

delete(和delete[])只是解除分配动态分配的内存(并为非POD类型运行析构函数,但现在这并不重要。)

data这里有自动存储时间。 delete[]不仅不起作用,还会导致未定义的行为。如果您尝试执行delete非动态分配的内存,一个好的编译器会发出警告。

即使内存不再标记为“正在使用”,您仍然可以访问它,但这会导致未定义的行为。

答案 3 :(得分:0)

delete hex;

将删除分配给十六进制结构的内存

答案 4 :(得分:0)

NOT 的会员数据具有自动存储持续时间。它具有任何存储持续时间,它是非静态成员的类。