Ralat C++: Tidak dapat memperuntukkan memori, bagaimana untuk menyelesaikannya?

王林
Lepaskan: 2023-08-22 15:22:42
asal
2614 orang telah melayarinya

Ralat C++: Tidak dapat memperuntukkan memori, bagaimana untuk menyelesaikannya?

C++ ialah bahasa pengaturcaraan yang berkuasa, tetapi anda juga akan menghadapi ralat semasa penggunaan. Salah satu ralat biasa ialah "Tidak dapat memperuntukkan memori". Jadi, apabila kita menghadapi ralat ini, bagaimana untuk menyelesaikannya?

Pertama sekali, kita perlu menjelaskan dengan jelas bahawa apabila kita menulis program C++, kita perlu memperuntukkan memori secara manual. Ini bermakna kita perlu mencipta penunjuk dan memperuntukkan ruang kepadanya. Proses ini memerlukan pengaturcara mengawal secara manual dan memastikan ruang yang diperuntukkan adalah mencukupi.

Apabila kita memperuntukkan ruang yang tidak mencukupi, ralat "Tidak dapat memperuntukkan memori" akan berlaku. Ralat ini berkaitan dengan fungsi yang kita gunakan semasa memperuntukkan ruang. Dalam C++, terdapat dua fungsi yang biasa digunakan untuk memperuntukkan memori: baru dan malloc. Di bawah ini kami akan memperkenalkan mereka masing-masing dan cara menyelesaikan ralat.

  1. Gunakan baharu untuk memperuntukkan memori

Menggunakan baharu untuk memperuntukkan memori ialah cara biasa dalam C++. Apabila kita perlu mencipta objek atau tatasusunan, kita biasanya menggunakan operator baharu untuk memperuntukkan memori. Contohnya:

int* myArray = new int[100];
Salin selepas log masuk

Pernyataan ini akan mencipta tatasusunan yang mengandungi 100 integer dan mengembalikan penuding ke permulaan tatasusunan. Selepas menggunakan tatasusunan, kita perlu melepaskan ruang secara manual:

delete[] myArray;
Salin selepas log masuk

Jika kita menghadapi ralat "Tidak dapat memperuntukkan memori" apabila menggunakan baru untuk memperuntukkan memori, mungkin terdapat beberapa sebab dan penyelesaian:

  • Ruang tidak mencukupi. Masalah ini agak biasa. Apabila ruang yang perlu kita peruntukkan melebihi ruang yang tersedia pada sistem, ralat "Tidak dapat memperuntukkan memori" berlaku. Pada masa ini, kita perlu mengoptimumkan atur cara, mengurangkan penggunaan memori, atau mempertimbangkan untuk meningkatkan memori sistem.
  • Memori bocor. Kebocoran memori berlaku apabila kita tidak mengeluarkan memori terpakai dalam masa. Ini akan menyebabkan ruang untuk memori yang diperuntukkan menjadi lebih kecil dan lebih kecil, akhirnya membawa kepada ralat "Tidak dapat memperuntukkan memori". Penyelesaian kepada masalah ini adalah dengan melepaskan ruang dalam masa untuk mengelakkan kebocoran memori.
  • Menggunakan fungsi peruntukan yang salah. Jika kita menggunakan new[] untuk memperuntukkan memori, tetapi menggunakan delete untuk melepaskan memori, atau menggunakan new untuk memperuntukkan memori, tetapi menggunakan percuma untuk melepaskan memori, ia akan membawa kepada ralat "Tidak dapat memperuntukkan memori". Oleh itu, kita perlu mengikut peraturan tertentu apabila menggunakan fungsi peruntukan dan pelepasan.
  1. Gunakan malloc untuk memperuntukkan memori

malloc ialah fungsi peruntukan memori yang biasa digunakan dalam bahasa C dan juga boleh digunakan dalam C++. Kod untuk memperuntukkan memori menggunakan malloc adalah seperti berikut:

int* myArray = (int*)malloc(100 * sizeof(int));
Salin selepas log masuk

Pernyataan ini akan mencipta tatasusunan yang mengandungi 100 integer dan mengembalikan penunjuk ke kedudukan permulaan tatasusunan. Selepas menggunakan tatasusunan, kita perlu melepaskan ruang secara manual:

free(myArray);
Salin selepas log masuk

Jika kita menghadapi ralat "Tidak dapat memperuntukkan memori" semasa menggunakan malloc untuk memperuntukkan memori, mungkin terdapat beberapa sebab dan penyelesaian:

  • Ruang tidak mencukupi. Situasi yang sama seperti apabila baru memperuntukkan memori Apabila ruang yang perlu kita peruntukkan melebihi ruang yang tersedia pada sistem, ralat "tidak dapat memperuntukkan memori" akan berlaku. Pada masa ini, kita perlu mengoptimumkan atur cara, mengurangkan penggunaan memori atau mempertimbangkan untuk meningkatkan memori sistem.
  • Memori tidak sejajar. Apabila malloc memperuntukkan memori, alamat memori tidak semestinya diselaraskan mengikut gandaan saiz. Jika kami tidak mengambil kira isu ini semasa menggunakan penunjuk, ralat "Tidak dapat memperuntukkan memori" akan berlaku. Pada ketika ini, kita perlu menyelaraskan ingatan.
  • Menggunakan fungsi peruntukan yang salah. Ia adalah sama seperti apabila menggunakan baru untuk memperuntukkan memori Jika kita menggunakan malloc untuk memperuntukkan memori, tetapi menggunakan padam untuk melepaskan memori, atau menggunakan baru untuk memperuntukkan memori, tetapi menggunakan percuma untuk melepaskan memori, ia akan membawa kepada "Tidak dapat. untuk memperuntukkan ralat memori". Oleh itu, kita perlu mengikut peraturan tertentu apabila menggunakan fungsi peruntukan dan pelepasan.

Ringkasan

Dalam pengaturcaraan C++, kita perlu memperuntukkan memori secara manual, yang memerlukan pengaturcara mengawal penggunaan memori. Apabila kita menghadapi ralat "Tidak dapat memperuntukkan memori" semasa memperuntukkan memori, kita boleh menyelesaikan masalah dengan cara yang disasarkan berdasarkan fungsi peruntukan yang digunakan.

Perlu diingatkan bahawa apabila kita menulis program, sebaiknya mulakan memori sebelum menggunakannya untuk mengelakkan hasil yang tidak diketahui. Pada masa yang sama, pelepasan memori yang tepat pada masanya boleh mengelakkan kebocoran memori dan ralat "tidak dapat memperuntukkan memori".

Atas ialah kandungan terperinci Ralat C++: Tidak dapat memperuntukkan memori, bagaimana untuk menyelesaikannya?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!