在 C++ 中 "new" 运算符之后使用 "realloc" 是否安全?
Is it safe to use the "realloc" after the "new" operator in C++?
据我所知,C++
中的 C
的 realloc
没有像 malloc
的 new
的确切替代方案。但是,当我在 C++
中使用 realloc
来更改 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;
}
此外,在这种情况下我应该使用哪个运算符来释放内存: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
只能与 delete
或 delete[]
匹配 - 将它与 realloc
一起使用是危险的,可能会导致安全风险。
此外,您为什么首先使用 new
和 delete
?如果您真的想自己管理内存,请使用 std::vector
之类的容器或 std::unique_ptr
之类的智能指针。
不,行为是 未定义。您只能在通过调用 new[]
.
获得的指针上调用 delete[]
使用 std::vector
会导致所有这些内存问题消失。
据我所知,C++
中的 C
的 realloc
没有像 malloc
的 new
的确切替代方案。但是,当我在 C++
中使用 realloc
来更改 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;
}
此外,在这种情况下我应该使用哪个运算符来释放内存: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
只能与 delete
或 delete[]
匹配 - 将它与 realloc
一起使用是危险的,可能会导致安全风险。
此外,您为什么首先使用 new
和 delete
?如果您真的想自己管理内存,请使用 std::vector
之类的容器或 std::unique_ptr
之类的智能指针。
不,行为是 未定义。您只能在通过调用 new[]
.
delete[]
使用 std::vector
会导致所有这些内存问题消失。