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

L_J*_*L_J -2 c++ realloc

据我所知,没有为没有确切的替代reallocCC++喜欢newmalloc.但是,当我使用realloc in C++来改变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;
}
Run Code Online (Sandbox Code Playgroud)

另外,我应该在这种情况下使用哪个运营商来释放内存: delete[]free()

Bat*_*eba 5

不,行为未定义.你只能调用delete[]你通过调用获得的指针new[].

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