Rumah > pembangunan bahagian belakang > C++ > Mengapa Saya Tidak Boleh Menggunakan Malloc dengan std::strings dalam C Structures?

Mengapa Saya Tidak Boleh Menggunakan Malloc dengan std::strings dalam C Structures?

Linda Hamilton
Lepaskan: 2024-11-18 19:46:02
asal
952 orang telah melayarinya

Why Can't I Use Malloc with std::strings in C   Structures?

Menggunakan Malloc dan std::Strings dalam C Structures

Anda telah menghadapi isu biasa apabila cuba menggunakan struktur yang mengandungi std:: rentetan dengan peruntukan memori dinamik menggunakan malloc(). Isu ini berpunca daripada kerumitan pembinaan objek dan pengurusan memori dalam C .

Masalah dengan Malloc

Malloc memperuntukkan memori mentah, mewujudkan blok ruang yang tidak diinisialisasi. Walau bagaimanapun, menggunakan malloc untuk objek dengan pembina bukan remeh, seperti std::string, adalah bermasalah kerana ia tidak memanggil pembina untuk memulakan objek dengan betul.

Menggunakan Baharu Daripada Malloc

Penyelesaiannya ialah menggunakan operator C baharu dan bukannya malloc. Baharu mencipta objek baharu dan memanggil pembinanya, memastikan permulaan yang betul. Dalam kes anda, anda boleh menggunakan:

example *ex = new example;
Salin selepas log masuk

Menggunakan Peletakan Baharu untuk Memori Mentah

Jika anda secara khusus perlu menggunakan malloc, anda boleh memperuntukkan memori mentah dengan malloc dan kemudian gunakan peletakan baharu untuk membina objek dalam ingatan itu:

void *ex_raw = malloc(sizeof(example));
example *ex = new(ex_raw) example;
Salin selepas log masuk

Walau bagaimanapun, menggunakan baharu secara langsung ialah kaedah pilihan dalam senario ini.

Atas ialah kandungan terperinci Mengapa Saya Tidak Boleh Menggunakan Malloc dengan std::strings dalam C Structures?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan