C++ undgå out of bounce når man access’er array

Hvis man som jeg i mange år, har arbejdet med ANSI C programmering, har man sikkert prøvet at bruge lang tid på, at finde en memory overskrivning,

som fik ens program til at opføre sig underligt eller crashe. Dette er tit, når man laver en out-of-bounce array access som f.eks.

uint8_t myArray[10];

myArray[11] = 4; // Out-of-bounce

 

Jeg har de sidste par år programmeret i C++, men opdagede først for nyligt, at C++ kan lave boundary checks for en.

Dette gøre med .at metoden.

Eks.

std:vector<int> myVector (10);

myVector.at(11) = 4;// Out-of-bounce

Når man laver en out-of-bounce access, kastes en exception. Jeg laver normalt embedded systemer, og har ikke support for exceptions.

Alligevel benytter jeg .at, fordi man under alle omstændigheder så ikke ender med et system der crasher. Selvfølgelig skal man helst lave et

range check, og udskrive en error meddelelse, således at fejlfindingen kan gøres så nemt som muligt.

/Flemming Jahn

 

Leave a Reply

Your email address will not be published. Required fields are marked *