Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Ekspresi 'array-name': Tidak ada array ke penunjuk yang membusuk (bounds.3).
Keterangan
Seperti C26481, pemeriksaan ini membantu memberlakukan aturan Pedoman Inti C++ I.13: Jangan meneruskan array sebagai penunjuk tunggal. Aturan mendeteksi tempat di mana informasi jenis array statis hilang dari kerusakan ke penunjuk mentah. Jenis zstring dan czstring tidak dikecualikan.
C26481 dan C26485 berasal dari aturan Profil Keselamatan Batas. Aturan ini diterapkan dalam rilis pertama Pemeriksa Pedoman Inti C++. Ini berlaku untuk kategori pointer mentah karena membantu menghindari penggunaan pointer mentah yang tidak aman.
Contoh
Sampel ini menghasilkan dua peringatan untuk array ke penunjuk yang membusuk dalam panggilan ke memcpy.
// c26485_bad.cpp
// compile using:
// set Esp.Extensions=CppCoreCheck.dll
// cl /W4 /EHsc /permissive- /analyze /analyze:plugin EspXEngine.dll /analyze:ruleset "%VSINSTALLDIR%\Team Tools\Static Analysis Tools\Rule Sets\CppCoreCheckBoundsRules.ruleset" c26485_bad.cpp
#include <cstring>
constexpr int array_length = 10;
int main() noexcept
{
int const from_array[array_length] = { 4, 3, 2, 1, 0, 9, 8, 7, 6, 5 };
int to_array[array_length] = {};
if (nullptr != memcpy(to_array, from_array, sizeof(int) * array_length))
return 0;
return 1;
}
Untuk mengatasi masalah ini, hindari panggilan yang mengambil parameter pointer, tetapi jangan mengelola informasi terikat. Penggunaan fungsi tersebut seringkali rawan kesalahan. Lebih suka panggilan pustaka standar C++ ke fungsi pustaka runtime C. Pertimbangkan untuk menggunakan gsl::span atau std::vector dalam fungsi Anda sendiri. Transmisi eksplisit ke jenis penunjuk yang membusuk mencegah peringatan, tetapi tidak mencegah kode buggy.