g ile benim sistemde bu koduHatalı std :: vector erişim çağrıları programdan çıkacak ve yardımcı bir hata mesajı ile derlenebilmesi mümkün mü?
#include <vector>
#include <iostream>
main()
{
std::vector <int> x(1);
for(int q=0;; q++)
{
int y = x[q];
std::cout << q << " ";
}
}
düşünün ++, bu Segmentation fault (core dumped)
ile çarpmadan önce 32570 kadar yazdırır. Muhtemelen bu kadar uzun sürer çünkü ~ 32570, OS ve/veya ayırıcının vektöre tahsis edeceği en küçük bellek yığınıdır. Ama elbette, böyle bir operasyonu yaptığımız zaman, dizinin sonuna kadar, normalde bir hatadır. Bu ne zaman olursa olsun, programın yararlı bir hata mesajı ile çıkabilmesi güzel olurdu.
Xcode ile birkaç yıl önce, std::vector
'un türüyle (ve adı?) Çıkacağı yerde gerçekleşen davranışı hatırlıyorum. Şu anda g ++ ile Linux'tayım. Bu hatlar boyunca herhangi bir çözüm var mı (ya da başka bir şey)?
İlgili: [fakat RELEASE içinde DEBUG'da kontrol sınırları yapıyor std :: Vektörün operatör derleme nasıl yapılır] (http://stackoverflow.com/q/1290396/96780) –
Hala bunu biliyorum kodda değişiklikler yapılmasını gerektirir, ancak kapsayıcıların üzerinde yineleme, ve kesinlikle aralık tabanlı-bu programların neden durduğunu araştırmak zorunda kalmadan bu sorunların çoğunu ortadan kaldırır. Bir mesajla çıkmanın, hafızanın üzerine yazılması gibi tanımlanmamış davranışlardan daha iyi olduğunu itiraf ediyorum. – stefaanv
İlgili: [Vektör sınıfının kapsamı dışına çıktığında derleme hatası veya çalışma zamanı hatası yok mu?] (Http://stackoverflow.com/q/27754726/96780). –