Rumah > pembangunan bahagian belakang > C++ > Bagaimanakah saya boleh mendayakan dan melumpuhkan pemeriksaan sempadan untuk `std::vector` dalam C ?

Bagaimanakah saya boleh mendayakan dan melumpuhkan pemeriksaan sempadan untuk `std::vector` dalam C ?

Patricia Arquette
Lepaskan: 2024-10-28 09:30:29
asal
971 orang telah melayarinya

How can I enable and disable bounds checking for `std::vector` in C  ?

Pilihan Pengkompil untuk Akses Tatasusunan Semak Terikat dalam Vektor C

Pustaka standard C menyediakan jenis std::vector, tatasusunan dinamik yang memastikan keselamatan ingatan. Walau bagaimanapun, mengakses elemen dengan operator[] membawa risiko wujud kelakuan tidak ditentukan jika indeks berada di luar had.

Dayakan Semakan Had dalam Mod Nyahpepijat

Untuk mendayakan had menyemak operator[] dalam Visual Studio, makro _SECURE_SCL boleh ditakrifkan kepada nilai bukan sifar. Ini akan menguatkuasakan semakan julat semasa masa jalan, menghasilkan pengecualian std::out_of_range apabila indeks tidak sah diakses.

Lumpuhkan Semakan Had dalam Mod Keluaran

Untuk mengoptimumkan prestasi dalam binaan keluaran, semakan sempadan boleh dilumpuhkan dengan menetapkan _SECURE_SCL kepada 0. Ini menghapuskan overhed masa jalan yang dikaitkan dengan pengesahan julat.

Contoh:

<code class="cpp">// Enable bounds checking in debug mode (assuming Visual Studio 2008 or earlier)
#ifdef _DEBUG
#define _SECURE_SCL 1
#endif

// ...
std::vector<std::vector<int>> v;
v[0][1]; // Throws `std::out_of_range` if i or j is out of bounds</code>
Salin selepas log masuk

Nota:

  • Visual Studio 2005 dan 2008 mendayakan semakan sempadan secara lalai dalam kedua-dua binaan nyahpepijat dan keluaran.
  • Dalam Visual Studio 2010 dan seterusnya, semakan sempadan didayakan secara lalai dalam binaan nyahpepijat tetapi dilumpuhkan dalam binaan keluaran. Makro _ITERATOR_DEBUG_LEVEL mengawal tingkah laku ini.

Atas ialah kandungan terperinci Bagaimanakah saya boleh mendayakan dan melumpuhkan pemeriksaan sempadan untuk `std::vector` 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