Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/139.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何扩展以前初始化的内存大小? intmain() { int*内存=新的int[5]; cout_C++_Memory Management_New Operator - Fatal编程技术网

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;
}