Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 150
Завершенные тесты: 1
#1

Почему этот код работает? - C++

05.05.2013, 00:25. Просмотров 584. Ответов 11
Метки нет (Все метки)

Почему этот код работает без единого предупреждения?
Мы заведомо вылазим за границу массива.
Известно что если размерность массива n, то последний элемент в нем n-1й. Но при этом в программе даже n+100й элемент воспринимается нормально как ни в чем не бывало. Что такое?
Кликните здесь для просмотра всего текста
C++
1
2
3
4
5
6
7
8
9
10
#include <iostream>
using namespace std;
int main (void)
{
    const int n = 5;
    int mas[n];
    mas[n+100] = 4;
    cout << mas[n+100] << endl;
    system ("pause");
}

если компилировать в Dev то зависает с ошибкой, а VS2010 спокойно компилирует и выводит результат
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.05.2013, 00:25     Почему этот код работает?
Посмотрите здесь:

Здравствуйте, Почему не работает этот код? - C++
Здравствуйте.Прошу помочь.Почему не работает этот код? std::ifstream input_file(&quot;http://nanshakov.16mb.com/developed/test/hash.txt&quot;); ...

Почему не работает этот кусок программы? - C++
Дана цепочка 00000101001010 она записана в массив, каждая цифра отдельный элемент. нужно инвертировать, не используя специальных...

Объяснить почему компилируется этот код (динамические массивы) - C++
Что это =-O int*array = new int; То есть почему компилится? anti-k, пожалуйста, прочитайте правила форума и постарайтесь...

Как этот код работает? - C++
#include &lt;iostream&gt; using namespace std; int main () { char ch = 0; int count = 0; cout &lt;&lt; &quot;Please enter a sentence:&quot;...

Не могу понять как работает этот код в деталях - C++
dg1-&gt;Rows-&gt;Clear();//Очищяет в датагриде строки ifstream infile (StrToChar(openFileDialog1-&gt;FileName));//Чтение из файла ...

Почему не работает код? - C++
подскажите пожалуйста почему мой код не работает. от меня требуется отсортировать целые числа и напечатать с начало четные, потом нечетные...

почему код не работает? - C++
помогите пожалуйста, почему у меня код не работает? Ввожу &quot;х&quot;, потом погрешность, а arth всегда =0. приложил Документ WORD, там...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
05.05.2013, 00:30     Почему этот код работает? #2
gorus95, потому,что за Вами никто не следит,что вы делаете, пока не начнете мешать системе. Если Вы просто читаете, то это никак ей не мешаете, если же попробуете писать, то Вам скажет "ая-я-яй"
Simpson_
15 / 15 / 3
Регистрация: 06.02.2013
Сообщений: 55
05.05.2013, 00:31     Почему этот код работает? #3
хм, в Visual Studio с какого-то перепугу компилирует, а в C++ Builder 6 нет.
тоже интересно как-так.
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 150
Завершенные тесты: 1
05.05.2013, 00:34  [ТС]     Почему этот код работает? #4
metaluga145, так мы и пробуем записать
C++
1
mas[n+100] = 4;
а VS говорит что все нормально, и при этом даже куда-то записывает, и потом даже откуда-то считывает
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
05.05.2013, 00:35     Почему этот код работает? #5
gorus95, Си не контролирует выход запределы массива.Если будете читать область памяти, то всё норм.Но если вы захотите записать что либо за пределы массива, то скорее всего выскочит ошибка и там будет что то вроде "Запись в защищенную область памяти"
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
05.05.2013, 00:37     Почему этот код работает? #6
gorus95, я Вам советую это запустить код раз 100 подряд и посмотреть что будет.
Если честно, то раз на раз не приходится. Если Вы попадаете на занятую память, то тогда программу сразу выбросит
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 150
Завершенные тесты: 1
05.05.2013, 00:41  [ТС]     Почему этот код работает? #7
metaluga145, да действительно. приблизительно на 6 раз выдает ошибку. но в Dev всегда ошибка
metaluga145
243 / 244 / 20
Регистрация: 08.04.2013
Сообщений: 927
05.05.2013, 00:50     Почему этот код работает? #8
gorus95, значит VS рассчитана на более опытных программистов.
Croessmah
Модератор
Эксперт CЭксперт С++
12979 / 7291 / 812
Регистрация: 27.09.2012
Сообщений: 18,007
Записей в блоге: 3
Завершенные тесты: 1
05.05.2013, 03:22     Почему этот код работает? #9
Цитата Сообщение от gorus95 Посмотреть сообщение
а VS2010 спокойно компилирует и выводит результат
Пройдитесь в пошаговом режиме думаю, это натолкнет Вас на мысль
Убежденный
Системный программист
Эксперт С++
15237 / 6869 / 1088
Регистрация: 02.05.2013
Сообщений: 11,246
Завершенные тесты: 1
05.05.2013, 10:31     Почему этот код работает? #10
Цитата Сообщение от gorus95 Посмотреть сообщение
Почему этот код работает без единого предупреждения?
Visual Studio 2010 SP1.
При компиляции данного кода возникает предупреждение:
Warning C4789: destination of memory copy is too small.

Цитата Сообщение от gorus95 Посмотреть сообщение
Мы заведомо вылазим за границу массива.
Известно что если размерность массива n, то последний элемент в нем n-1й. Но при этом в программе даже n+100й элемент воспринимается нормально как ни в чем не бывало. Что такое?
Компилятор не знает наших намерений.
Может быть, выход за пределы массива является задумкой программиста и преследует
какую-то оправданную цель. Поэтому компилятор предупреждает, но не вмешивается.
sovaz1997
CEO SOVAZ Corp.
380 / 226 / 2
Регистрация: 17.12.2011
Сообщений: 819
Записей в блоге: 1
Завершенные тесты: 1
05.05.2013, 12:08     Почему этот код работает? #11
Это от компилятора зависит
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.05.2013, 12:46     Почему этот код работает?
Еще ссылки по теме:

Почему не работает код? - C++
можете подсказать почему мой код не работает правильно ??? задача вот в чем Вход программы имеет следующий формат. Сначала...

Почему не работает код? - C++
можете подсказать почему мой код не работает? задача, из файла читаются футбольные команды и счета, а программа составляет турнирную...

Почему код не работает? - C++
#include &lt;iostream&gt; using namespace std; unsigned long double* remove(unsigned long double* Arr, size_t* Size) { ...

Почему не работает код? - C++
Может кто найдёт ошибку: #include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;time.h&gt; #include &lt;stdlib.h&gt; #include &lt;windows.h&gt; ...

Как и почему работает код? - C++
Доброго времени суток. Не могу понять почему работает код : struct sA{ char* val; sA(){ val = nullptr; } sA(char*...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
gorus95
5 / 5 / 1
Регистрация: 22.12.2012
Сообщений: 150
Завершенные тесты: 1
05.05.2013, 12:46  [ТС]     Почему этот код работает? #12
понятно, спасибо всем
Yandex
Объявления
05.05.2013, 12:46     Почему этот код работает?
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru