在 C++ 中 "new" 运算符之后使用 "realloc" 是否安全?

Is it safe to use the "realloc" after the "new" operator in C++?

据我所知,C++ 中的 Crealloc 没有像 mallocnew 的确切替代方案。但是,当我在 C++ 中使用 realloc 来更改 new 运算符分配的内存时,它工作正常。

像我在下面的代码中那样使用这两个(newrealloc)是否安全,或者它会导致一些问题?

#include <iostream>
#include <cstdlib>

int main()
{
    int size = 5;
    int * arr = new int[size]{ 1,3,5,7,9 };

    for (int i = 0; i < size; i++)
        std::cout << *(arr + i) << (i < size - 1 ? ' ' : '\n');

    size++;
    arr = (int*)realloc(arr, size * sizeof(int));

    *(arr + size - 1) = 11;
    for (int i = 0; i < size; i++)
        std::cout << *(arr + i) << (i < size - 1 ? ' ' : '\n');

    delete[] arr;
    //free(arr);

    std::cin.get();
    return 0;
}

此外,在这种情况下我应该使用哪个运算符来释放内存:delete[] of free()?

不要将 c 内存函数与 c++ 内存函数混合使用,否则你会玩得很糟糕。

看这个: What is C++ version of realloc(), to allocate the new buffer and copy the contents from the old one?

不安全。 new 只能与 deletedelete[] 匹配 - 将它与 realloc 一起使用是危险的,可能会导致安全风险。

此外,您为什么首先使用 newdelete?如果您真的想自己管理内存,请使用 std::vector 之类的容器或 std::unique_ptr 之类的智能指针。

不,行为是 未定义。您只能在通过调用 new[].

获得的指针上调用 delete[]

使用 std::vector 会导致所有这些内存问题消失。