提问者:小点点

如何扩展先前初始化的内存大小?


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

当用new初始化时,有没有一种方法可以在C++中扩展先前初始化的内存。 上面的代码最终将为memory创建一个新的内存位置。 这是否也意味着以前分配的内存最终占用了我的内存空间,因为我没有删除它。


共3个答案

匿名用户

您可以使用std::vector,它在大多数情况下会过度分配,因此在某种程度上会扩展而不重新分配。

您也可以使用mallocrealloc,它们的作用与vector类似,但我不建议使用,因为您必须手动调用运算符new和析构函数。

你也可以设计你自己的分配器,它可以做你想做的任何事情,但是这需要做更多的工作,所以我还是用Vector吧。

匿名用户

根据这个场景,最好的解决方案,我建议你使用链表。

创建一个名为block的内存节点

class Node{
  Node *next;//point to the next node
  int value// value
...//whatever you need to add for your block(sometimes you need size add that also)
}

使用内存时,先添加节点(最初是头节点),然后逐个插入内存。 使用链表而不是使用固定大小的数组来操纵内存是很容易的。 最好参考操作系统中使用的内存管理技术。 然后你会得到更好的理解。

匿名用户

您可以使用C语言提供的realloc。

memory=(int*)realloc(memory,10);

它将从同一个地址重新分配。