2012-02-20 3 views
1

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

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"); 

Благодаря

ответ

5

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

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

+0

[«C позволяет легко стрелять в ногу, C++ делает это сложнее, но когда вы делаете это, удаляет всю свою ногу».) (Http://www2.research.att.com/~bs/ bs_faq.html # действительно, скажем, что) – Lundin

Смежные вопросы