このようなプログラムがあるとき、配列の範囲外に書こうと
していることを検出する方法はないでしょうか?

#include <stdio.h>
int i[5];
int main(void) {
 int *iptr;
 iptr = i;
 iptr[5] = 10;
 printf("%d\n",iptr[5]);
 return 0;
}