c язык + двумерный массив - PullRequest
1 голос
/ 20 февраля 2012

У меня есть один код c.Где я дал индекс массива как 12. Но это позволяет мне инициализировать массив больше к этому индексу вместо того, чтобы выдавать ошибку для индекса вне границ.Может кто-нибудь, пожалуйста, объясните мне, что это происходит.

int vas1[12][12];
    vas1[15][15]=0;

    int i,j;
    for (i = 0; i < 15; i ++)
    {
        for (j = 0; j < 15; j ++) {
            printf("i=%d j=%d vas=%d",i,j,vas1[i][j]); 

        }
    }

printf("Success");

Спасибо

1 Ответ

5 голосов
/ 20 февраля 2012

C не выполняет проверку границ при доступе к массиву. Он просто помечает незаконные доступы как «неопределенное поведение», поэтому каждая реализация может делать что угодно. Поскольку использование C означает, что вы знаете, что делаете, C позволяет вам выстрелить себе в ногу .

На практике иногда вы получаете ошибку, иногда нет. Иногда вы не получите ошибку, но клиент получит. В худшем случае: вы не получите ошибку, но программа будет вести себя действительно странно (переменные изменяют значения без причины и т. Д.).

...