Rumah > Artikel > pembangunan bahagian belakang > Bagaimanakah Saya Boleh Memperuntukkan Memori dengan Betul untuk Struktur yang Mengandungi std::strings dalam 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; }
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;
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;
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!