在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中文網其他相關文章!