Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah Saya Boleh Memperuntukkan Memori dengan Betul untuk Struktur yang Mengandungi std::strings dalam C ?

Bagaimanakah Saya Boleh Memperuntukkan Memori dengan Betul untuk Struktur yang Mengandungi std::strings dalam C ?

Barbara Streisand
Lepaskan: 2024-11-24 06:17:14
asal
809 orang telah melayarinya

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

Mengendalikan Struktur dengan std::Strings dalam C : Menavigasi Peruntukan Memori

Dalam C , apabila berurusan dengan struktur yang mengandungi std::strings dan menggunakan malloc(), perangkap tertentu boleh timbul. Pertimbangkan contoh berikut:

struct example {
 std::string data;
};

int main() {
 example *ex = (example *)malloc(sizeof(*ex));
 ex->data = "hello world";
 std::cout << ex->data << std::endl;
}
Salin selepas log masuk

Setelah dilaksanakan, program ini ranap dengan kesalahan pembahagian. Tingkah laku ini berpunca daripada sifat semula jadi malloc() dan pembinaan std::strings.

Maldvertising dan Peruntukan Memori

Tidak seperti baru, malloc() hanya memperuntukkan ingatan mentah. Dalam konteks ini, percubaan untuk menggunakan memori malloc()-ed sebagai objek "sebenar" boleh membawa kepada hasil yang tidak ditentukan. Untuk membuat instantiate objek dalam ingatan dengan betul, gunakan new dan bukannya malloc():

example *ex = new example;
Salin selepas log masuk

Menipu malloc() ke dalam Kerjasama

Sebagai alternatif, dengan menggunakan gabungan malloc () dan pengendali baharu peletakan, ia boleh dilakukan untuk membina objek dalam malloc()-ed memori:

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

Walau bagaimanapun, menggunakan teknik ini mungkin terbukti tidak diperlukan dalam konteks mengurus struktur dengan std::strings.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memperuntukkan Memori dengan Betul untuk Struktur yang Mengandungi std::strings dalam C ?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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