6 / 6 / 5
Регистрация: 22.08.2011
Сообщений: 75
1

"мёд как бы есть, но его как бы нет"

12.05.2012, 11:38. Показов 1202. Ответов 4
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
 
using namespace std;
 
int main()
{
    int array[0];
    for (int i=0; i<5; i++)
    {
        array[i] = i;
        cout << array[i] << endl;
    }
    return 0;
}
Почему этот код работает, ведь он обращается к несуществующему элементу массива?
После благополучного выполнения программы сообщается об ошибке сегментирования (хотя с этого вроде бы должно начинаться). Между тем программа, из которой я это вырезал, не возвращает вообще никакой ошибки.
Как это так?
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.05.2012, 11:38
Ответы с готовыми решениями:

Дана строка, в котором есть слово "да" или слово "нет". Если в нем есть слово "нет", то удалить его
Дана строка, в котором есть слово &quot;да&quot; или слово &quot;нет&quot;. Если в нем есть слово &quot;нет&quot;, то удалить его...

Как исправить ошибку ""Ссылки на тип "Component" требует его определения в "System", но его не удалось найти"?
using System; using System.Collections.Generic; using System.Data.OleDb; using System.Linq;...

Как в sql реализован логич.тип?Как можно в sql сделать так,чтобы были только значения "0"и"1" или "да"и"Нет"?
Хочу использовать в таблице переменные логического типа, но не нашла ничего про логический тип в...

Как изменить текст в системных кнопках? Например, при удалении файла есть 2 кнопки ("да" и "нет"). Как текст в этих кнопках заменить на свой?
Не надо говорить, что так сделать нельзя. Сам видел программу &quot;BazarBox&quot;. Она меняет их текст)...

4
Higher
1952 / 1218 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
12.05.2012, 11:40 2
Это называется undefined behavior, что на русский можно перевести как "неопределенное поведение". Это значит, что стандарт не предусматривает результат такой операции, и может произойти что угодно(на разных компиляторах - разное поведение). Например, может пойти дождь.
1
Модератор
Эксперт по электронике
8695 / 6493 / 879
Регистрация: 14.02.2011
Сообщений: 22,713
12.05.2012, 11:46 3
запускал в Дебаге???
если да то там для выделения памяти, массивов и стека прописывается область защищенной памяти
и ты пишешь в неё(по крайней мере VS)
если в Релизе то должен бы затерется стек и при выходе программа бы рухнула

Добавлено через 1 минуту
ты точно скопировал код???
может в оригинале была подмена адреса возврата и по сему все работало

Добавлено через 1 минуту
Цитата Сообщение от diagon Посмотреть сообщение
на разных компиляторах - разное поведение
даже на разных платформах
0
6 / 6 / 5
Регистрация: 22.08.2011
Сообщений: 75
12.05.2012, 11:50  [ТС] 4
Я точно скопировал код. Запускал в консоли
Bash
1
2
3
4
5
6
7
8
9
# g++ -o3 -o a1 a1.cpp
# ./a1
0
1
2
3
4
ошибка сегментирования
#
Я специально выделил это в отдельный файл, нет ни дебага, ни релиза
0
Модератор
Эксперт по электронике
8695 / 6493 / 879
Регистрация: 14.02.2011
Сообщений: 22,713
12.05.2012, 12:02 5
ну все правильно
затер стек проге некуда вернутся по return ну и рухнули
попробуй пройти в отладчике и посмотреть как меняются переменные
лучше всего дизасемблировать IDA и пройти ее отладчиком увидишь как затрется стек
или напиши так
C++
1
2
3
4
5
6
 for (int i=0; i<5; i++)
    {
        cout << array[i];
        array[i] = i;
        cout << array[i] << endl;
    }
узнаешь что было и стало в памяти

вообще то практического применения сии вопросы не имеют

Добавлено через 4 минуты
Цитата Сообщение от Voroshek Посмотреть сообщение
нет ни дебага, ни релиза
это режимы компиляции Debug(Для отладки)записываются служебные структуры, защитные блоки прочие навороты
Relise(Окончательный) происходит оптимизация выбрасывается все ненужное
Цитата Сообщение от Voroshek Посмотреть сообщение
g++ -o3 -o a1 a1.cpp
в данном компиляторе не силен не могу сказать в каком режиме ты компилил
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.05.2012, 12:02
Помогаю со студенческими работами здесь

Есть такие приколы, в которых задаётся вопрос, требующий ответ "ДА" или "НЕТ" (нет убегает).
Есть такие приколы, в которых задаётся вопрос, требующий ответ &quot;ДА&quot; или &quot;НЕТ&quot;. Нет убегает (поймать...

После каждого знака препинания (".", ",", ";") вставить в строку пробел, если там его нет
Выполните задания с использованием библиотечного класса string. Даны строка S. Необходимо после...

Строка: Как дописать код так, чтобы, когда нет буквы "б", появлялось сообщение: "Такого символа в слове нет".
Помогите,как дописать в коде что когда нет буквы б.Писало что &quot;Такого символа в слове нет&quot; ...

Как написать регулярное выражение для выдергивания английских букв и символов: "+", ",", ":", "-", " ", "!", "?" и "."
Не могу ни как собразить как написать регулярное выражение для выдергивания английских букв и...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru