Rumah  >  Artikel  >  pembangunan bahagian belakang  >  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
Barbara Streisandasal
2024-11-24 06:17:14687semak imbas

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;
}

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!

Kenyataan:
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