Rumah > pembangunan bahagian belakang > C++ > Bagaimana untuk Memperuntukkan Memori dengan betul untuk Struktur C dengan Ahli Rentetan?

Bagaimana untuk Memperuntukkan Memori dengan betul untuk Struktur C dengan Ahli Rentetan?

DDD
Lepaskan: 2024-11-21 00:33:16
asal
808 orang telah melayarinya

How to Properly Allocate Memory for C   Structures with String Members?

Menggunakan Rentetan C dalam Struktur yang Diperuntukkan dengan malloc

Apabila memperuntukkan memori untuk struktur C menggunakan malloc, adalah penting untuk mempertimbangkan kehadiran data ahli yang memerlukan pembina bukan remeh, seperti std::string.

Contoh Masalah dan Kod

Pertimbangkan kod berikut yang cuba memperuntukkan memori untuk struktur yang mengandungi ahli std::string:

#include <iostream>
#include <string>
#include <cstdlib>

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

Kod ini berkemungkinan akan mengakibatkan ralat pembahagian. Isu ini timbul kerana malloc memperuntukkan memori mentah yang tidak dimulakan secara automatik, meninggalkan ahli std::string dalam keadaan tidak dimulakan.

Penyelesaian: Menggunakan Operator Peruntukan Memori C

Cara yang betul untuk memperuntukkan memori untuk objek C adalah dengan menggunakan operator peruntukan memori C, seperti baru dan padam. Pengendali ini secara automatik memanggil pembina dan pemusnah untuk objek yang diperuntukkan, memastikan permulaan dan pembersihan yang betul.

Untuk kod yang disediakan, penyelesaiannya ialah menggantikan malloc dengan yang baharu:

example *ex = new example;
Salin selepas log masuk

Alternatif: Peletakan Baharu

Jika anda perlu memperuntukkan memori dengan malloc tetapi masih mahu menggunakan pembina C, anda boleh menggunakan operator baharu peletakan:

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

Peletakan baharu membenarkan anda untuk membina objek di lokasi tertentu dalam ingatan. Walau bagaimanapun, pendekatan ini tidak disyorkan melainkan perlu atas sebab tertentu.

Kesimpulan

Apabila berurusan dengan struktur C yang mengandungi ahli data bukan remeh, adalah penting untuk digunakan teknik peruntukan memori yang betul dengan baharu dan padam untuk mengelakkan tingkah laku atau ralat yang tidak ditentukan.

Atas ialah kandungan terperinci Bagaimana untuk Memperuntukkan Memori dengan betul untuk Struktur C dengan Ahli Rentetan?. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan