कच्चे सरणियों के लिए, मैं ऐसा नहीं सोचता, क्योंकि -fbounds-check
अपने उदाहरण और Mingw जी ++ 4.4.1 के साथ काम नहीं किया है, और क्योंकि वर्ष 3.x डॉक्स मैं कहना
-fbounds जाँच करें
सामने समाप्त होता है कि यह समर्थन के लिए, जाँच करने के लिए है कि पहुँच सरणियों के लिए इस्तेमाल किया सूचकांक घोषित सीमा के भीतर हैं अतिरिक्त कोड उत्पन्न करते हैं। यह वर्तमान में केवल जावा और फ़ोरट्रान 77 फ्रंट-एंड द्वारा समर्थित है, जहां यह विकल्प क्रमशः सत्य और गलत पर डिफ़ॉल्ट है।
हालांकि, std::vector
के साथ एक से थोड़ा अव्यावहारिक रन-टाइम सीमा-चेकिंग के लिए at
उपयोग कर सकते हैं (अपवाद उत्पन्न करता है)। और आप मानक लाइब्रेरी के एक विशेष डीबग संस्करण का उपयोग कर सकते हैं, जो []
के लिए व्यावहारिक रन-टाइम सीमा-जांच प्रदान करता है। उदाहरण के लिए, संकलन और नरक करते समय;
#include <iostream>
#include <vector>
using namespace std;
int main()
{
vector<int> arr(2);
cout << arr[ 4 ] << endl;
}
और नरकिप; आप अलग अलग क्रमशः गैर जाँच और जी ++ मानक पुस्तकालय कार्यान्वयन की रिहाई और डिबग संस्करणों के लिए जाँच व्यवहार मिलता है:
C:\test> g++ x.cpp & a
4083049
C:\test> g++ x.cpp -D _GLIBCXX_DEBUG -D _GLIBCXX_DEBUG_PEDANTIC & a
c:\program files\mingw\bin\../lib/gcc/mingw32/4.4.1/include/c++/debug/vector:265:
error: attempt to subscript container with out-of-bounds index 4, but
container only holds 2 elements.
Objects involved in the operation:
sequence "this" @ 0x0x22ff1c {
type = NSt7__debug6vectorIiSaIiEEE;
}
This application has requested the Runtime to terminate it in an unusual way.
Please contact the application's support team for more information.
C:\test> _
कथित तौर पर के लिए नए जी ++ संस्करणों (4.0 के बाद) आप _GLIBCXX_DEBUG_PEDANTIC
प्रतीक जरूरत नहीं है। विवरण के लिए, GNU documentation देखें।
चीयर्स & एचएचटी।,
स्रोत
2011-01-24 05:06:04
'-Wall -Wextra -ansi -pedantic' इस कार्यक्रम के लिए चेतावनियां उत्पन्न नहीं करता है :( – EnabrenTane