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

时间:2018-07-09 14:01:44

标签: c++ realloc

据我所知,reallocC的{​​{1}}的{​​{1}}并没有C++的{​​{1}}那样的确切替代方案。但是,当我使用new中的malloc来更改realloc运算符分配的内存时,它可以正常工作。

像下面的代码一样使用这两个(C++new)是否安全?否则会导致某些问题?

new

在这种情况下,我应该使用哪个运算符释放内存:realloc中的#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; }

3 个答案:

答案 0 :(得分:5)

否,行为是 undefined 。您只能在通过调用delete[]获得的指针上调用new[]

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

答案 1 :(得分:3)

这是不安全的。 new仅应与deletedelete[]匹配-与realloc一起使用是危险的,并可能导致安全风险。

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

答案 2 :(得分:0)

请勿将c内存函数与c ++内存函数混合使用,否则您会遇到麻烦。

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