是否可以逐步增加指针所指向的免费商店的已分配内存量?例如,我知道这是可能的。
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分配,并在那里存储最新的输入。这可能吗?或者我只是坚持分配一组号码。
答案 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_iterator和std:push_back
std::copy
输入std::vector
。