C++ 如何扩展以前初始化的内存大小? intmain() { int*内存=新的int[5]; cout
您可以使用C++ 如何扩展以前初始化的内存大小? intmain() { int*内存=新的int[5]; cout,c++,memory-management,new-operator,C++,Memory Management,New Operator,您可以使用std::vector,它在很大程度上是过度分配的,因此在某种程度上不需要重新分配就可以扩展 您还可以使用malloc和realloc,这两个函数的作用类似于vector,但我不推荐使用它,因为您必须手动调用操作符new和析构函数 您也可以设计自己的分配器,它可以做任何您想做的事情,但这需要更多的工作,所以我只使用vector。您可以使用C语言提供的realloc 内存=(int*)realloc(内存,10) 它将从同一地址重新分配。使用std::vector@PaulMcKenzi
std::vector
,它在很大程度上是过度分配的,因此在某种程度上不需要重新分配就可以扩展
您还可以使用malloc
和realloc
,这两个函数的作用类似于vector,但我不推荐使用它,因为您必须手动调用操作符new
和析构函数
您也可以设计自己的分配器,它可以做任何您想做的事情,但这需要更多的工作,所以我只使用vector。您可以使用C语言提供的realloc 内存=(int*)realloc(内存,10)
它将从同一地址重新分配。使用
std::vector
@PaulMcKenzie它也会重新分配。因此不扩展以前的内存。OP的代码中没有重新分配,只有内存泄漏。@PrateekParashar--您真正想解决的问题是什么?这正在变成一个无法扩展的std::array
“它将从同一地址重新分配。”它可能会也可能不会。对于非POD结构来说,这是不安全的,因为它不调用构造函数或析构函数。不能保证realloc
返回相同的地址。您不能realloc
分配了new
malloc,calloc
和realloc
的内存不调用构造函数或析构函数,因此它们通常不适合C++对象使用。如果在<实例> >代码> >代码> NulLPTR</代码>中,你会出现内存泄漏。有<代码> unIndialZieZ.Stime可以帮助<代码> ReLoCu。但是,IDSS与向量相比仍然很差。
int main()
{
int *memory = new int[5];
cout << "Memory starts at: " << &memory[0]; // 0x56225460beb0
memory = new int[10];
cout << "\nMemory starts at: "<< &memory[0]; // 0x56225460c2e0
// different
cout << '\n';
return 0;
}