C не поймает эту ошибку для вас.Вы должны сделать это самостоятельно.
Например, вы можете безопасно обернуть доступ к вашему массиву в функцию:
typedef struct
{
char *data;
int length;
} myArrayType;
void MakeArray( myArrayType *p, int length )
{
p->data = (char *)malloc(length);
p->length = length;
}
int WriteToArrayWithBoundsChecking( myArrayType *p, int index, char value )
{
if ( index >= 0 && index < p->length )
{
p->data[index] = value;
return 1; // return "success"
}
else
{
return 0; // return "failure"
}
}
Затем вы можете посмотреть возвращаемое значение WriteToArrayWithBoundsChecking (), чтобы увидеть, была ли ваша запись успешной или нет.
Конечно, вы должны помнить, чтобы очистить память, на которую указывает myArrayType->data
, когда вы закончите.В противном случае вы вызовете утечку.