В C или C ++ нет проверки массивов за пределами. Один из способов обойти это - упаковать его в структуру:
struct array_of_foo{
int length;
foo *arr; //array with variable length.
};
Затем его можно инициализировать:
array_of_foo *ar(int length){
array_of_foo *out = (array_of_foo*) malloc(sizeof(array_of_foo));
out->arr = (foo*) malloc(length*sizeof(foo));
}
А затем получили доступ:
foo I(array_of_foo *ar, int ix){ //may need to be foo* I(...
if(ix>ar->length-1){printf("out of range!\n")} //error
return ar->arr[ix];
}
И наконец освободился:
void freeFoo(array_of_foo *ar){ //is it nessessary to free both ar->arr and ar?
free(ar->arr); free(ar);
}
Таким образом, он может предупреждать программистов о выходе за пределы. Но существенно ли замедлит эту упаковку предварительное исполнение?