3 ms·
Can you bounds check dynamically sized arrays? For example, a function that receives the size as a separate argument? double f(double *xs, int n){
by ufo 6y ago
Can you bounds check dynamically sized arrays? For example, a function that receives the size as a separate argument?
double f(double *xs, int n){
return xs[g()];
}
- kiwidrew 6y agoYes. In my hypothetical world where the C compiler makes use of the VLA declaration in the function arguments, it would certainly be possible for the compiler to insert automatic bounds checking in this case: double f(xs, n) double xs[n]; size_t n; { size_t _tmp0 = g(); /* temporary var created by compiler */ assert(_tmp0 < n); /* bounds check inserted by compiler */ return xs[_tmp0]; } The key to making this possible is telling the compiler about the relationship between double* xs and size_t n; once the compiler has the knowledge that the type of xs is double [n] (array of double with first dimension n) it would be able to automatically insert dynamic bounds checks.
- moonchild 6y ago> dynamically sized arrays Yes. What you can't do is associate bounds information with some specific pointer to an array, but this will work, for instance: int *x = malloc(2 * sizeof(int)); x[1]; //ok x[2]; //runtime error