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

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

Восстановить пароль Регистрация
 
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
20.01.2014, 18:48     Является ли отрицательное значение выходом за пределы массива #1
Если написать такой код, то прога скомпилируется и запустится, но можно ли потом ждать проблем и неожиданных зависаний ?

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

C++ Выход за пределы массива
C++ Наибольшее отрицательное значение в массиве
C++ Выход за пределы динамического массива
Как положительной переменной присвоить отрицательное значение? C++
C++ Разработать подпрограмму, находящую элемент массива Х, для которого значение функции f является наименьшим
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11838 / 6817 / 771
Регистрация: 27.09.2012
Сообщений: 16,910
Записей в блоге: 2
Завершенные тесты: 1
20.01.2014, 18:51     Является ли отрицательное значение выходом за пределы массива #2
mass [ i ] это *(mass + i)
значит имеем *(mass - 1)

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

с чего вдруг?
долго объяснять, если это ошибка то уже не важно удобно это или нет
alsav22
5282 / 4801 / 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;
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
20.01.2014, 19:14  [ТС]     Является ли отрицательное значение выходом за пределы массива #5
alsav22,
нет присвоения значения при отрицательном индексе я никогда не делаю, просто иногда проверяю значение массива в условии.
То есть может быть такое что прога зависнет при такой проверке или выдаст значение которое ожидаю из за случайного мусора в массиве по отрицательному индексу ?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11838 / 6817 / 771
Регистрация: 27.09.2012
Сообщений: 16,910
Записей в блоге: 2
Завершенные тесты: 1
20.01.2014, 19:15     Является ли отрицательное значение выходом за пределы массива #6
Цитата Сообщение от nill Посмотреть сообщение
из за случайного мусора в массиве по отрицательному индексу ?
конечно может. И случится это как раз во время презентации программы так всегда
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.01.2014, 19:26     Является ли отрицательное значение выходом за пределы массива #7
Цитата Сообщение от nill Посмотреть сообщение
То есть может быть такое что прога зависнет при такой проверке
При чтении не должно. Есть необходимость в таких извращениях?
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11838 / 6817 / 771
Регистрация: 27.09.2012
Сообщений: 16,910
Записей в блоге: 2
Завершенные тесты: 1
20.01.2014, 19:27     Является ли отрицательное значение выходом за пределы массива #8
Цитата Сообщение от alsav22 Посмотреть сообщение
При чтении не должно.
смотря что там за условия. Может если значение попадется "особое", то программа попадет в бесконечный цикл или еще что-нибудь
alsav22
5282 / 4801 / 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;
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
11838 / 6817 / 771
Регистрация: 27.09.2012
Сообщений: 16,910
Записей в блоге: 2
Завершенные тесты: 1
20.01.2014, 19:31     Является ли отрицательное значение выходом за пределы массива #10
Цитата Сообщение от alsav22 Посмотреть сообщение
можно получить размер динамического массива:
а если в Release скомпилировать?
nill
8 / 8 / 0
Регистрация: 16.08.2009
Сообщений: 417
20.01.2014, 19:36  [ТС]     Является ли отрицательное значение выходом за пределы массива #11
C++
1
смотря что там за условия.
условие всегда одно
C++
1
if(mass[-1]>0){}
то есть даже так делать нельзя и нужно исправлять все такие моменты ?
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.01.2014, 19:47     Является ли отрицательное значение выходом за пределы массива #12

Не по теме:

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



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

Дано натуральное число n. Определите, является ли оно степенью числа 2, и если является, то выведите значение этой степени C++
C++ Определите, является ли число степенью числа 2, и если является, то выведите значение этой степени
C++ Найти отрицательное число и после отрицательное число заменить все элемент на нули

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

Или воспользуйтесь поиском по форуму:
TheFox
 Аватар для TheFox
131 / 67 / 10
Регистрация: 13.05.2013
Сообщений: 438
20.01.2014, 20:04     Является ли отрицательное значение выходом за пределы массива #17
Цитата Сообщение от nill Посмотреть сообщение
там может оказаться какое то положительное значение которое я жду ?
Там может оказаться все что угодно, в том числе и, чисто случайно, то, что вы ждете.
Yandex
Объявления
20.01.2014, 20:04     Является ли отрицательное значение выходом за пределы массива
Ответ Создать тему
Опции темы

Текущее время: 16:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru