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

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

Войти
Регистрация
Восстановить пароль
 
 
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
#1

Является ли отрицательное значение выходом за пределы массива - C++

20.01.2014, 18:48. Просмотров 369. Ответов 16
Метки нет (Все метки)

Если написать такой код, то прога скомпилируется и запустится, но можно ли потом ждать проблем и неожиданных зависаний ?

C++
1
2
3
int i=-1;
int mass[2]={0};
_cprintf("mass[i]= %d\n", mass[i]);
Часто использую отрицательные значения обычно -1 для индексов массива (так просто получается удобнее), проблем не замечал, но вот задумался.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.01.2014, 18:48
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Является ли отрицательное значение выходом за пределы массива (C++):

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

Разработать подпрограмму, находящую элемент массива Х, для которого значение функции f является наименьшим - C++
Прошу помощи в написании алгоритма(псевдокод) для решения данной задачи. Разработать подпрограмму, находящую элемент массива Х, для...

Как положительной переменной присвоить отрицательное значение? - C++
Надо изменить знак числа на противоположный. Условие: нельзя использовать клавишу "-" Как это можно сделать? #include <iostream> ...

Дано целое число.Если оно является положительным,то прибавить к нему 1;если отрицательное,то вычесть из него 2 - C++
Дано целое число.Если оно является положительным,то прибавить к нему 1;если отрицательное,то вычесть из него 2; если нулевым,то заменить...

Записать в файл отрицательное значение элемента массива - Visual Basic
ввести массив A(25) вещественного типа . нужно записать в файл отрицательные значение элемента на этом застрял и не могу ни где найти кому...

Посчитать среднее арифметическое значение всех отрицательное элементов массива - Алгоритмы
Разработать алгоритм который дозволяэ в одномерном масивидийсних числе длиной N посчитать среднее арифметическое значение всех...

16
Croessmah
Эксперт CЭксперт С++
13412 / 7563 / 855
Регистрация: 27.09.2012
Сообщений: 18,614
Записей в блоге: 3
Завершенные тесты: 1
20.01.2014, 18:51 #2
mass [ i ] это *(mass + i)
значит имеем *(mass - 1)

Добавлено через 44 секунды
Цитата Сообщение от nill Посмотреть сообщение
так просто получается удобнее
с чего вдруг?
0
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
20.01.2014, 18:55  [ТС] #3
Croessmah, ответ не понял это ошибка или нет?

с чего вдруг?
долго объяснять, если это ошибка то уже не важно удобно это или нет
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.01.2014, 19:08 #4
Цитата Сообщение от nill Посмотреть сообщение
Является ли отрицательное значение выходом за пределы массива
Является.

Добавлено через 3 минуты
Цитата Сообщение от nill Посмотреть сообщение
но можно ли потом ждать проблем и неожиданных зависаний ?
Вот так можно ждать:
C++
1
2
3
4
5
6
7
8
int* arr = new int[2];
arr[-1] = 5;
cout << arr[-1] << endl;
delete [] arr;
// или
int arr[2];
arr[-1] = 5;
cout << arr[-1] << endl;
0
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
20.01.2014, 19:14  [ТС] #5
alsav22,
нет присвоения значения при отрицательном индексе я никогда не делаю, просто иногда проверяю значение массива в условии.
То есть может быть такое что прога зависнет при такой проверке или выдаст значение которое ожидаю из за случайного мусора в массиве по отрицательному индексу ?
0
Croessmah
Эксперт CЭксперт С++
13412 / 7563 / 855
Регистрация: 27.09.2012
Сообщений: 18,614
Записей в блоге: 3
Завершенные тесты: 1
20.01.2014, 19:15 #6
Цитата Сообщение от nill Посмотреть сообщение
из за случайного мусора в массиве по отрицательному индексу ?
конечно может. И случится это как раз во время презентации программы так всегда
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.01.2014, 19:26 #7
Цитата Сообщение от nill Посмотреть сообщение
То есть может быть такое что прога зависнет при такой проверке
При чтении не должно. Есть необходимость в таких извращениях?
0
Croessmah
Эксперт CЭксперт С++
13412 / 7563 / 855
Регистрация: 27.09.2012
Сообщений: 18,614
Записей в блоге: 3
Завершенные тесты: 1
20.01.2014, 19:27 #8
Цитата Сообщение от alsav22 Посмотреть сообщение
При чтении не должно.
смотря что там за условия. Может если значение попадется "особое", то программа попадет в бесконечный цикл или еще что-нибудь
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.01.2014, 19:31 #9
Цитата Сообщение от Croessmah Посмотреть сообщение
смотря что там за условия.
Следить за условиями, это дело ТС, пусть продумает это. Я - про само чтение за пределами массива.
Вот так, например, в 10-й студии, можно получить размер динамического массива:
C++
1
2
3
int* arr = new int[3];
cout << arr[-4] << endl;
delete [] arr;
0
Croessmah
Эксперт CЭксперт С++
13412 / 7563 / 855
Регистрация: 27.09.2012
Сообщений: 18,614
Записей в блоге: 3
Завершенные тесты: 1
20.01.2014, 19:31 #10
Цитата Сообщение от alsav22 Посмотреть сообщение
можно получить размер динамического массива:
а если в Release скомпилировать?
1
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
20.01.2014, 19:36  [ТС] #11
C++
1
смотря что там за условия.
условие всегда одно
C++
1
if(mass[-1]>0){}
то есть даже так делать нельзя и нужно исправлять все такие моменты ?
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.01.2014, 19:47 #12

Не по теме:

Цитата Сообщение от Croessmah Посмотреть сообщение
а если в Release скомпилировать?
Забыл дописать: "вот так в Debug можно узнать..."



Добавлено через 1 минуту
Цитата Сообщение от nill Посмотреть сообщение
условие всегда одно
Что вы там проверяете, если ничего туда не пишите? Смысл проверки не улавливаю...
0
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
20.01.2014, 19:49  [ТС] #13
alsav22, это я для примера чтобы было понятно, проверяю я одним массивом в котором могут быть отрицательные значения, другой массив. Я просто упростил для примера чтобы получить понятный ответ.
0
alsav22
5421 / 4816 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.01.2014, 19:53 #14
Само действие (проверка условия) ошибки не должно вызывать, т.к. здесь только чтение.
0
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
20.01.2014, 19:59  [ТС] #15
alsav22, ну а теоритически там может оказаться какое то положительное значение которое я жду ?
и по логике проги это тоже вызовет ошибку
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.01.2014, 19:59
Привет! Вот еще темы с ответами:

Почему результатом выполнения кода является отрицательное число - Pascal
Почему результатом этого кода: Program monica; Begin Writeln((sqr(-50000))) ; end. является отрицательное число? Как компьютер...

Непонятное значение AX перед выходом - в старшем байте лишние биты - Assembler
имеем программу вычисляющую выражение (А/ 2 + В) / 4 + С – 1 TITLE MyProgram1;название программы .MODEL small;отводим под стек и под...

Ошибка с выходом за границы измерения массива - Pascal ABC
Program lab4; uses crt; { Ввести строку символов, предусмотреть ввод пустой строки ил строки из одних пробелов). Разделителями слов...

1C 8.x Проверить отрицательное значение - 1С
Подскажите как проверить в запросе значение если оно отридцательное


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

Или воспользуйтесь поиском по форуму:
15
Yandex
Объявления
20.01.2014, 19:59
Ответ Создать тему
Опции темы

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