我有一個最小的代碼之後的行爲:根本原因爲不同的輸出在去除打印語句「出的矢量誤差的範圍」
vector<int> result(9);
int count = 0;
cout << "test1\n"; // removing this line causes 'core dump'
for (int j=0; j < 12; j++)
result[count++] = 1;
cout << "test2\n";
結果是尺寸9的載體,和'for'循環我正在訪問超出範圍的元素。
現在,除去TEST1線,代碼運行沒有任何錯誤;但與此COUT線,我得到
*錯誤的`./out_of_range_vector2' :免費():無效的下一個尺寸(快速):0x0000000001b27c20 *
我明白,這告訴我,免費()遇到了未分配我的malloc()一些內存,但什麼樣的作用這是否COUT線在這裏踢球?我想更多地瞭解這裏發生的事情。更具體地講,我有兩個問題:
- 是這個引起的對這些2箱子堆不同的狀態?如果是這樣,究竟有什麼不同?
- 爲什麼有時範圍內的元素進行訪問不會導致錯誤?是因爲它沒有超過矢量的容量?
走出界限會導致[* undefined behavior *](http://en.cppreference.com/w/cpp/language/ub),這就是故事的結尾。 –
根據定義,未定義的行爲是未定義的。 –
如果你對範圍檢查感興趣,可以考慮['std :: vector :: at'](http://en.cppreference.com/w/cpp/container/vector/at)。 –