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

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

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

Как проверить выходит ли цикл за размер массива - C++

23.01.2011, 19:11. Просмотров 411. Ответов 7
Метки нет (Все метки)

Давно мучает такая проблема допустим есть массив

C++
1
int x[10]={0};
и цикл
C++
1
for(int i=0; i<11; i++){x[i]=0;}
цикл выходит за размер массива, при этом прога может как просто зависнуть так и присвоить какое то левое значение совершенно другому массиву или переменной никак не связанной с массивом X.

Можно как то проанализировать код на наличие таких ошибок ? за всеми же не уследишь, а компилятор ничего плохого в них не находит.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.01.2011, 19:11     Как проверить выходит ли цикл за размер массива
Посмотрите здесь:

Не выходит узнать размер файла - C++
#include &lt;iostream&gt; #include &lt;fstream&gt; void main() { std::ifstream input; long int size_of_file; ...

Как проверить размер чаровской переменной именно в битах - C++
Здравствуйте, уважаемые знатоки! Подскажите, пожалуйста, как проверить размер чаровской переменной именно в битах, а потом, если битиков...

Цикл выходит за рамки строки - C++
Сия функция выдает ошибку subscript out of range. Никак не могу понять, где оно выходит за рамки? bool ismailvalid(string mail) { ...

Ввести размер массива с клавиатуры и передать этот размер в конструктор - C++
Я создал массив объектов. И я хочу ввести размер этого массива с клавиатуры, и передать этот размер в конструктор, как мне это сделать? ...

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

Как задать произвольный размер массива - C++
В общем проблема такая, есть задание (написанное каким то недалеким человеком). В нем не указано половины информации, то есть, делай как...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MegaAce
330 / 304 / 65
Регистрация: 14.02.2010
Сообщений: 662
23.01.2011, 19:16     Как проверить выходит ли цикл за размер массива #2
На мой взгдяд надо грамотный писать код. В конкретной ситуации лучше создать переменную, и выглядит лучше, и геморроя поменьше
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
23.01.2011, 19:20     Как проверить выходит ли цикл за размер массива #3
C++
1
2
int mas[10];
for(int j=0; j<sizeof(mas)/sizeof(mas[0]);j++){}
используйте это и за пределы массива вы не выйдите.
nill
9 / 9 / 0
Регистрация: 16.08.2009
Сообщений: 417
23.01.2011, 19:22  [ТС]     Как проверить выходит ли цикл за размер массива #4
MegaAce,
какую переменную создать ты о чем ?
код уже написан и нужна какая нить прога чтобы его проанализировать на такую ошибку мож в вижуал студии что то есть.

Добавлено через 1 минуту
NiRamz
спасибо!

а как по быстродействию такая штука ?
или это все профи так делают ?
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
23.01.2011, 19:25     Как проверить выходит ли цикл за размер массива #5
эта штука возвращает объем памяти выделенный под весь массив, деленный на объем памяти занимаемый первым элементом. я не думаю что очень то и много тормозит.

MegaAce имел ввиду что то типо следующего,
C++
1
2
3
const int N=10;
mas[N];
for(int j=0; j<N;j++){}
nill
9 / 9 / 0
Регистрация: 16.08.2009
Сообщений: 417
23.01.2011, 19:28  [ТС]     Как проверить выходит ли цикл за размер массива #6
NiRamz
понятно
ну твой вариант мне нравиться больше.
хотя тоже много работы предстоит может все такие есть какая нить утилита которая сможет это сама проверить
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
23.01.2011, 19:31     Как проверить выходит ли цикл за размер массива #7
честно не знаю, изначально пишу всегда с использованием sizeof(), поэтому таких проблем не возникает.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2011, 07:36     Как проверить выходит ли цикл за размер массива
Еще ссылки по теме:

как динамически менять размер массива? - C++
Мир Вашей Хате!!! А подскажите пжалста как динамически менять размер массива, или укажите где можно почитать, или примерчиком...

как снять ограничение на размер статического массива - C++
Мне нужно выполнить программу и чтобы ее выполнение превышало 0,2 секунды,но я не могу этого сделать,т.к. если я делаю двумерные массивы...

Константное поле класса как размер массива - C++
class Array { private: const int size; int array; public: Array(): size(10) { }

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


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

Или воспользуйтесь поиском по форуму:
accept
4820 / 3240 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
24.01.2011, 07:36     Как проверить выходит ли цикл за размер массива #8
Цитата Сообщение от nill
а как по быстродействию такая штука ?
вычисляется один раз, программа содержит только число

Добавлено через 23 минуты
Цитата Сообщение от nill
может все такие есть какая нить утилита которая сможет это сама проверить
grep или sed
Код
[guest@localhost tmp]$ cat file.txt
a
bc
sdf
sdf
sdd
d
d
for(int i=0; i<11; i++)
sdf
sdf
d
     for(int i=0; i<11; i++)    
sdf
sd
sd
for(int i=0; i<11; i++
a
b

for(int i=0; i < N; i++)
s
d
       for(int i=0; i<N; i++)
s
d
[guest@localhost tmp]$ cat -n file.txt
     1  a
     2  bc
     3  sdf
     4  sdf
     5  sdd
     6  d
     7  d
     8  for(int i=0; i<11; i++)
     9  sdf
    10  sdf
    11  d
    12       for(int i=0; i<11; i++)    
    13  sdf
    14  sd
    15  sd
    16  for(int i=0; i<11; i++
    17  a
    18  b
    19
    20  for(int i=0; i < N; i++)
    21  s
    22  d
    23         for(int i=0; i<N; i++)
    24  s
    25  d
[guest@localhost tmp]$
[guest@localhost tmp]$ cat file.txt | sed -n -r '/^[[:space:]]*for\(.*;.*<[[:space:]]*[[:digit:]]+[[:space:]]*;.*\)[[:space:]]*$/{ p; = }'
for(int i=0; i<11; i++)
8
     for(int i=0; i<11; i++)    
12
[guest@localhost tmp]$

можно найти все такие места и проверить, не являются ли они циклами для перебора элементов массива
Yandex
Объявления
24.01.2011, 07:36     Как проверить выходит ли цикл за размер массива
Ответ Создать тему
Опции темы

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