增加免费商店分配内存的方法

时间:2009-08-08 03:08:57

标签: c++ heap

是否可以逐步增加指针所指向的免费商店的已分配内存量?例如,我知道这是可能的。

char* p = new char; // allocates one char to free store
char* p = new char[10]; // allocates 10 chars to free store

但如果我想做一些事情,比如增加指针所指向的内存量,该怎么办呢?有点像...

char input;
char*p = 0;
while(cin >> input)  // store input chars into an array in the free store
    char* p = new char(input);

显然这只会使p指向分配的新输入,但希望您了解目标是为p指向的地址添加新的char分配,并在那里存储最新的输入。这可能吗?或者我只是坚持分配一组号码。

4 个答案:

答案 0 :(得分:4)

C解决方案是使用malloc而不是new - 这使得realloc可用。 C ++解决方案是使用std :: vector和其他很好的容器来处理这些低级问题,让你在更高,更好的抽象层次上工作! - )

答案 1 :(得分:2)

您可以使用函数realloc()执行此操作,但这可能仅适用于使用malloc()而不是“new”分配的内存

话虽如此,您可能不希望一次为一个字节分配更多内存。为了提高效率,您应该分配大大超过单个字节的块,并跟踪实际使用的数量。

答案 2 :(得分:1)

答案 3 :(得分:1)

您似乎正在使用C ++。虽然您可以使用realloc,但C ++可以避免明确的内存管理,这比自己做更安全,更容易,也更有效。

在您的示例中,您希望将std :: vector用作chars的容器类。 std :: vector将根据需要自动增长。

事实上,在您的情况下,您可以使用std::istreambuf_iteratorstd:push_back std::copy输入std::vector