簡體   English   中英

如何在C ++中為緩沖區分配更多內存?

[英]How to allocate more memory for a buffer in C++?

我有指針str

char* str = new char[10];

我使用內存塊str點來存儲數據。

如何為str指向的緩沖區分配更多字節而不丟失緩沖區中存儲的舊數據?

請改用std :: string 它可以滿足您的需要而無需擔心分配,復制等。您仍然可以通過c_str()函數訪問原始內存。

即使是std::vector<char>也能很好地適合你。

new[]另一個緩沖區,在那里復制數據(使用memcpy() ),然后delete[]舊的緩沖區地址,將新的緩沖區地址分配給最初持有舊緩沖區地址的指針。

你不能使用new結構。 為此你需要使用好的舊mallocreallocfree (不要混合malloc / realloc / free和new / delete)。

如果你真的使用C ++,最正確的解決方案是使用std :: vector。 我假設您沒有將該信息用作標准字符串,在這種情況下,您應該使用std :: string(這是std :: vector的特化,所以沒什么大不了的)。 你正在創造至少10個字符。 這給了我一個提示,你可能很確定你需要10個字符,但也許你會更多。 也許您擔心分配和釋放內存所涉及的性能問題。 在這種情況下,您可以創建字符串,然后保留您期望需要的估計容量,因此至少在達到該限制之前不會有任何重新分配。

int main()
{
    std::string s;
    s.reserve( 10 );
    // do whatever with s
}

正如其他人已經指出的那樣,使用std :: string或std :: Vector會讓你忘記復制,調整大小或刪除保留的內存。

realloc函數就是您要搜索的內容。 你必須使用malloc / free而不是new / delete來使用它

您必須分配一個不同的,更大的字符串數組,並將數據從str復制到新的字符串數組。

您可以使用realloc: http ://www.cplusplus.com/reference/clibrary/cstdlib/realloc/我想補充一點,這種方法不是受歡迎的c ++方法(根據您的需要,您可以使用std::vector<char>例如)。

分配有點像尋找停車位。 您在這里詢問是否可以在停放了幾天的汽車上添加預告片。

答案是,在C中存在一種叫做realloc的東西,允許你做以下事情。 如果我已經有足夠的地方添加我的預告片,請執行此操作。 如果沒有停放在另一個足夠大的拖車和汽車的地方,這相當於復制您的數據。

換句話說,你將獲得強大而隨機的性能命中率。

那么你會在現實世界中做些什么呢? 如果您知道可能需要在車上添加一些預告片,那么您可能會將車停放在比需要更大的地方。 當超過該地點所需的尺寸時,您將把您的汽車和拖車搬到一個有利於未來拖車的地方。

這正是STL的字符串和向量正在為你做的事情。 您甚至可以通過撥打“預訂”來給他們一些期貨預告片的大小。 使用std :: string可能是解決問題的最佳方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM