复制从 new 获取的指针,然后删除时会发生什么情况?[复制]

What happens when you copy a pointer obtained from new, and then delete? [duplicate]

提问人:YQ_AX 提问时间:10/8/2023 最后编辑:Jan SchultkeYQ_AX 更新时间:10/8/2023 访问量:64

问:

这是一个基于 C++11 的问题。

当我通过另一个指针删除动态数组时会发生什么情况?这个动态数组真的被删除了吗?

    int* a = new int[NUM01];
    int* a1 = a;

    for (int i = 0; i < NUM01; i++) {
        a1[i] = 0;
    }

    delete[] a1;    //What's happened?

我试着观察.a[0]

    cout << a[0] << endl;

    delete[] a1;

    cout << a[0] << endl;

结果是: 0 -572662307

什么是真实的?

C++ 内存管理 删除运算符

评论

3赞 Raildex 10/8/2023
未定义的行为。访问已删除的内存位置
0赞 CITBL 10/8/2023
与 相同。解除分配指针指向的内存。两者 和 都指向同一个内存块,因为它们是相等的。delete[] aaa1
0赞 john 10/8/2023
删除发生在指针上,而不是变量上。哪个变量持有指针并不重要。
2赞 john 10/8/2023
使用指向已删除内存的指针不是测试内存是否已删除的好方法。你调用的只是未定义的行为,根据定义,这些行为是无法测试的。
3赞 Pepijn Kramer 10/8/2023
这是你不应该再在 C++ 中使用原始指针和 new/delete 的原因之一,即使许多遗留材料仍然教授这一点。在当前C++中,您应该使用 std::make_unique/std::unique_ptr、std::vector(对于可调整大小的数组)或 std::make_shared/std::shared_ptr。就您而言,最好的选择是std::vector<int>

答: 暂无答案