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

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

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

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

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

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

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

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

Не выходит узнать размер файла - 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 (СИ)
const char* test_str = &quot;01234\x00 789&quot;; //очевидно, что strlen(test_str) == 5; sizeof(test_str) == 4; sizeof(*test_str) == 1; ...

Как объединить в цикл и проверить на совпадение? - PHP
Здравствуйте. // подключаюсь к db и получаю все записи с переданным id $connect = $db-&gt;query(&quot;SELECT * FROM `o_post` WHERE `id` =...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MegaAce
330 / 304 / 65
Регистрация: 14.02.2010
Сообщений: 662
23.01.2011, 19:16 #2
На мой взгдяд надо грамотный писать код. В конкретной ситуации лучше создать переменную, и выглядит лучше, и геморроя поменьше
0
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++){}
используйте это и за пределы массива вы не выйдите.
1
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
23.01.2011, 19:22  [ТС] #4
MegaAce,
какую переменную создать ты о чем ?
код уже написан и нужна какая нить прога чтобы его проанализировать на такую ошибку мож в вижуал студии что то есть.

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

а как по быстродействию такая штука ?
или это все профи так делают ?
0
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++){}
0
nill
10 / 10 / 0
Регистрация: 16.08.2009
Сообщений: 417
23.01.2011, 19:28  [ТС] #6
NiRamz
понятно
ну твой вариант мне нравиться больше.
хотя тоже много работы предстоит может все такие есть какая нить утилита которая сможет это сама проверить
0
NiRamz
211 / 211 / 16
Регистрация: 26.12.2010
Сообщений: 691
23.01.2011, 19:31 #7
честно не знаю, изначально пишу всегда с использованием sizeof(), поэтому таких проблем не возникает.
0
accept
4822 / 3243 / 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]$

можно найти все такие места и проверить, не являются ли они циклами для перебора элементов массива
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.01.2011, 07:36
Привет! Вот еще темы с ответами:

Как проверить mime тип файла и размер до загрузки на сервер - JavaScript
Здравствуйте, как можно с помощью javascript и jquery проверить какой я только что выбрал файл? У меня форма с одним input type=&quot;file&quot; и...

Цикл немного выходит за массив - C Linux
Здравствуйте, уважаемые форумчане! Изучаю Си, в данный момент времени - массивы. Вот собственно простенькая программа для поиска...

Цикл который проходил один раз и выходит - C#
Здравствуйте! Есть такой код для записи в бд циклом foreach: foreach (Works works in ListWorks) { ...

Как задать размер массива и сразу же вводить элементы массива? - Delphi
Походу требуется задать размер массива и сразу же вводить его элементы. Я знаю как это реализовывается в C++ но на Pascal-е вообще понятия...


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

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

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