Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
0 / 0 / 0
Регистрация: 13.10.2011
Сообщений: 138
1

найти ошибку

14.10.2011, 11:58. Показов 1019. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
4)Баллов: 1
Ошибка этапа выполнения (семантическая ошибка)
Выберите по крайней мере один ответ:

пропуск ;

выход за границы массива

деление на 0
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.10.2011, 11:58
Ответы с готовыми решениями:

Найти ошибку в программе: в visual studio выдает ошибку
#include <math.h> #include <conio.h> #include <iostream> using namespace std; int main() ...

Найти слова, повторяющиеся более одного раза, не могу найти ошибку
#include <iostream> using namespace std; void obr1(char **s, char **mas, int n, int m) { int...

Помогите найти ошибку: По двум сторонам и углу найти все остальное
Доброго времени суток. В универе дали задание написать программу "По двум сторонам и углу между...

Найти сумму первых n-четных натуральных чисел (найти ошибку)
Нужно найти сумму первых n-четных натуральных чисел. Ошибка вылетает на 13 строке, должно быть я не...

16
Заблокирован
14.10.2011, 12:13 2
деление на 0
1
237 / 210 / 29
Регистрация: 08.06.2011
Сообщений: 467
14.10.2011, 12:51 3
выход за границы массива, тоже рантайм ошибка
0
Заблокирован
14.10.2011, 13:13 4
C++
1
2
3
4
5
6
7
8
9
#include "iostream"
 
int main()
{
    int *t = new int[3];
    std::cout << t[4];
    system("pause");
    return 0;
}
а если так?
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
14.10.2011, 13:21 5
Цитата Сообщение от Dzhej-Dzhej Посмотреть сообщение
а если так?
C++
1
2
3
4
5
6
7
8
9
#include "iostream"
 
int main()
{
    int *t = new int[3];
    t[3] = 0;
    system("pause >> NULL");
    return 0;
}
И ведь не угадаешь, что будет... UB такой UB
0
return (true);
1976 / 1111 / 221
Регистрация: 19.04.2011
Сообщений: 2,345
14.10.2011, 13:24 6
Предполагаю, что выход за границы массива тоже будет семантической ошибкой
0
Заблокирован
14.10.2011, 13:38 7
Здесь
0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
14.10.2011, 16:48 8
Разве выход за границы массива не логическая ошибка? Ведь если изменить чужую память, то ничего не произойдет, однако логика программы пострадает.
Хотя, если выйти за границы массива и попытаться освободить этот массив операций delete, то будет ошибка времени выполнения.
0
Заблокирован
14.10.2011, 18:49 9
Цитата Сообщение от Chelioss Посмотреть сообщение
Хотя, если выйти за границы массива и попытаться освободить этот массив операций delete, то будет ошибка времени выполнения.
почему?

я так понимаю "Ошибка этапа выполнения (семантическая ошибка)" ~ "Runtime error"
когда посреди работы экзешника выпадает сообщение что "программа выполнила недопустимую операцию..." и предлагают ее завершение.

когда логическая ошибка, то программа продолжает работать(разве что ОС заглючит) но не корректно.

Цитата Сообщение от Chelioss Посмотреть сообщение
Разве выход за границы массива не логическая ошибка?
логическая
если у строки убрать завершающий ноль, тоже интересно.
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
14.10.2011, 18:51 10
Цитата Сообщение от Dzhej-Dzhej Посмотреть сообщение
если у строки убрать завершающий ноль
Ещё можно указателю присвоить случайный адрес... Так, из интереса.
0
Dzhej-Dzhej
14.10.2011, 19:12
  #11

Не по теме:

Цитата Сообщение от Deviaphan Посмотреть сообщение
Ещё можно указателю присвоить случайный адрес... Так, из интереса.
и записать туда что-то.

Совсем не по теме:
я когда-то себе на сях++ покер делал, "техасский безлимит", и иногда раз в десять-двадцать раздач вылетала левая карта и залипала в левом верхнем углу(а у одного игрока(~8+я) пропадала), две недели с ума сходил, пока вычислил(выход за предел диапазона, однако).

0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
14.10.2011, 19:19 12
Цитата Сообщение от Dzhej-Dzhej Посмотреть сообщение
почему?
Что почему? У меня всегда была ошибка времени выполнения, когда я пытался освободить массив, при этом перед этим я выходил за границу этого массива.

Добавлено через 53 секунды
Цитата Сообщение от Dzhej-Dzhej Посмотреть сообщение
почему?

я так понимаю "Ошибка этапа выполнения (семантическая ошибка)" ~ "Runtime error"
когда посреди работы экзешника выпадает сообщение что "программа выполнила недопустимую операцию..." и предлагают ее завершение.

когда логическая ошибка, то программа продолжает работать(разве что ОС заглючит) но не корректно.


логическая
если у строки убрать завершающий ноль, тоже интересно.
Я так и не понял. Вы со мной согласились или нет?
Если выйти за предел массива, то программа работает.
0
Dzhej-Dzhej
14.10.2011, 19:29
  #13

Не по теме:

Цитата Сообщение от Chelioss Посмотреть сообщение
Что почему? У меня всегда была ошибка времени выполнения, когда я пытался освободить массив, при этом перед этим я выходил за границу этого массива.
здесь я спорить не буду, так как уже давно не программирую на с++ и не таким уж продвинутым я был.

может кто захочет спорить о способах реализации и особенностях IDE но не я, я сказал что думал( возможно и ошибся), и в холивар втягиваться не буду.

0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
14.10.2011, 19:34 14
Цитата Сообщение от Dzhej-Dzhej Посмотреть сообщение
У меня всегда была ошибка времени выполнения, когда я пытался освободить массив, при этом перед этим я выходил за границу этого массива.
Только в случае выхода за нулевой элемент (-1). Выход за последний элемент чаще приводит к более поздним и более сложнообнаружимым ошибком .
0
Dzhej-Dzhej
14.10.2011, 20:13
  #15

Не по теме:

Цитата Сообщение от Deviaphan Посмотреть сообщение
Только в случае выхода за нулевой элемент (-1). Выход за последний элемент чаще приводит к более поздним и более сложнообнаружимым ошибком .
именно за последний
класс карта был; и массивы карт лежали рядом(перемешанная колода, что у игроков, что на столе)
и когда кликнуть на правую кромку самой правой карты получалось, например (78/*координаты клика*/*2)/78 - выдавало третий элемент в массиве из двух карт.
как-то так

0
186 / 186 / 21
Регистрация: 08.01.2011
Сообщений: 1,139
14.10.2011, 21:49 16
Цитата Сообщение от Deviaphan Посмотреть сообщение
Только в случае выхода за нулевой элемент (-1). Выход за последний элемент чаще приводит к более поздним и более сложнообнаружимым ошибком .
Не только за нулевой. В обоих случаях выдает ошибку( Visual Studio 2008 )
В случае
C++
1
2
3
4
5
6
7
8
9
10
#include "iostream"
 
int main()
{
    int *t = new int[3];
    t[4] = 0;
    delete [] t;
    system( "pause" );
    return 0;
}
и в
C++
1
2
3
4
5
6
7
8
9
10
#include "iostream"
 
int main()
{
    int *t = new int[3];
    t[-1] = 0;
    delete []t;
    system( "pause" );
    return 0;
}
Причем если во втором случае убрать delete, то ошибки не будет.
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
15.10.2011, 07:44 17
Цитата Сообщение от Chelioss Посмотреть сообщение
В обоих случаях выдает ошибку
В релизе, в случае с динамическим массивом, не должно.
Т.е. когда -1, то затирается размер выделенной памяти, когда выходишь за последний элемент затирается случайная память, в которой может ничего и не быть. В случае с дебагом затираются флаговые значения, добавленные отладчиком для проверки выхода за границы массива.
Со статическим массивом будет порча соседних значений или порча стека.

Добавлено через 57 секунд
Цитата Сообщение от Chelioss Посмотреть сообщение
если во втором случае убрать delete
Корректность памяти проверяется не всегда, а иногда. Например, при удалении. Отключи "Buffer Secure Check" или собери в релизе.
0
15.10.2011, 07:44
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.10.2011, 07:44
Помогаю со студенческими работами здесь

Найти отношение максимального элемента k-й строки к максимальному элементу матрицы (найти ошибку)
Дан двумерный массив действительных чисел размера 10×10. Найти отношение максимального элемента...

Найти сумму целых отрицательных чисел удовлетворяющих условию (найти и исправить ошибку в коде)
#include&lt;iostream&gt; #include&lt;math.h&gt; using namespace std; int main() { int y = 0; ...

Массивы. Найти среднее арифметическое элементов массива, расположенных до максимального элемента (найти ошибку в задании)
Препод говорит что тут есть ошибка, но где не говорит, прошу если кото-нибуть заметит сообщите. ...

Массивы. Посчитать количество положительных, найти минимальное, удалить строку с минимальным (Не могу найти ошибку)
// Заданы матрицы X(8;4),Y(5;5),Z(6;9). // Для каждой из матриц определить строку, в которой...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru