【问题标题】:Deallocator of arrays in c++ after modification of pointer [duplicate]修改指针后C++中的数组释放器[重复]
【发布时间】:2015-02-24 00:36:16
【问题描述】:

这里是代码

int *p = new int[10];
...
delete[] p;

调用 delete[] 时程序如何知道有多少元素?

假设我们在中间插入了以下代码:

p++;

程序会尝试再释放一个元素吗?它会在第 10 个元素处停止吗?

【问题讨论】:

  • 你会有未定义的行为,因为p 不再是new[] 返回的指针。这将是糟糕
  • 它是实现定义的,但通常一个秘密整数存储在内存中包含其大小的数组之前。
  • both 问题密切相关,How does delete[] know it's an array

标签: c++ memory-management delete-operator


【解决方案1】:

分配器会记录您分配的内存量。这通常存储在您要分配的内存之前的“头”段中。当你执行 delete[] 时,de-allocator 会准确地知道要释放多少内存。

如果你修改了指针,你会有一个未定义的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-12-30
    • 2012-05-11
    • 2019-09-25
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 2015-06-21
    • 2015-03-04
    相关资源
    最近更新 更多