2015-09-09 6 views
-2

В следующем коде я присвоены значения к элементам массива, которые находятся вне границ массива, в Linux среды в CLI код дает мне сообщение об ошибке : array index 5 is past the end of the array which contains 5 elements.Массив: из индекса/границ

Но при отладке на IDE codeblocks -compiler не может найти эту ошибку - так есть ли какое-либо объяснение?

#include <stdio.h> 
int main() 
{ 
    int array[5],i; 
    for (i=0; i<5; i++) { 
     array[i] = i+1; 
    } 
    array[5] = 666; 

    for (i=0; i<5; i++) { 
     printf("array[%d]=%d\n", i, array[i]); 
    } 
    printf("array[5]=%d\n", array[5]); 
    return 0; 
} 
+6

Использование знаков за пределами границ массива - [неопределенное поведение] (https://www.google.pl/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=c%20undefined%20behavior). Вы не можете, кроме любой среды, сделать что-нибудь. – Crozin

+0

Что такое компилятор кодовых блоков? – LPs

+0

Подумайте о последствиях ** undefined ** _behaviour_. – Olaf

ответ

0

Кодовые блоки, как и большинство IDE, не содержат компилятор и не генерируют подобные предупреждения сами по себе. Вместо этого он вызывает компилятор командной строки, такой как gcc, и отображает вам ошибки и предупреждения, возвращаемые компилятором.

Вы должны проверить, какой компилятор вызывается, с какими параметрами компилятора, в настройках Codeblocks/project.

НКУ должен генерировать «индекс массива находится выше границы массива» предупреждения для вашего кода, но только с -Wall и -O2 вариантов (или эквивалент).

Оптимизация (-O2) часто не включена для отладки, что может быть объяснением, почему вы не получаете предупреждение при отладке.

0

Когда вы обращаетесь к индексу массива, C и C++ не выполняют проверку привязки. Значения, которые вы получаете при чтении, - это то, что существует на стеке в этом конкретном месте. Они полностью не определены.

Разница между двумя компиляторами, возможно, связана с тем, что одна из них представляет собой более новую версию, включая некоторую проверку границ массива.

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