首頁 > 後端開發 > C++ > 主體

如何在 C 中為包含 std::strings 的結構正確分配記憶體?

Barbara Streisand
發布: 2024-11-24 06:17:14
原創
685 人瀏覽過

How Can I Correctly Allocate Memory for Structures Containing std::strings in C  ?

在C 中使用std::String 處理結構:導航記憶體分配

在C 中,處理包含std::string 和的結構時使用malloc() 可能會出現某些陷阱。考慮以下範例:

struct example {
 std::string data;
};

int main() {
 example *ex = (example *)malloc(sizeof(*ex));
 ex->data = "hello world";
 std::cout << ex->data << std::endl;
}
登入後複製

執行時,程式因分段錯誤而崩潰。這種行為源自於 malloc() 的固有性質和 std::strings 的建構。

Maldvertising 和記憶體分配

與 new 不同,malloc() 只是分配原始記憶體。在這種情況下,嘗試使用 malloc()-ed 記憶體作為「真實」物件可能會導致未定義的結果。要正確實例化記憶體中的對象,請使用new 而不是malloc():

example *ex = new example;
登入後複製

欺騙malloc() 進行合作

或者,透過使用malloc的組合() 和放置new 運算符,在malloc()-ed中構造物件是可行的記憶體:

void *ex_raw = malloc(sizeof(example));
example *ex = new(ex_raw) example;
登入後複製

但是,在使用 std::strings 管理結構的上下文中,採用這些技術可能是不必要的。

以上是如何在 C 中為包含 std::strings 的結構正確分配記憶體?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板