Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Ateller
0 / 0 / 1
Регистрация: 18.10.2015
Сообщений: 4
#1

Выход за пределы массива - C++

07.11.2015, 17:34. Просмотров 236. Ответов 3
Метки нет (Все метки)

Где-то здесь происходит выход за пределы массива puti[3], но я не могу его найти уже второй день. Объясните, пожалуйста, в чем моя проблема и как ее исправить.
http://www.cyberforum.ru/cpp-beginners/thread2270284.html
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <conio.h>
#include <stdio.h>
int main()
{
int i,j,s,l,n,p,e,k,b,g[3][3],puti[3],ras[3][3];
for (i=1;i<=3;i++) //ввод матрицы смежности
    {
    for (j=1;j<=3;j++)
        scanf ("%d",&g[i][j]);
    }
for (n=1;n<=3;n++)
    for (p=1;p<=3;p++)
    {
    for (i=1;i<=3;i++)
    puti[i]=200;
    s=n;
    e=p;
    puti[s]=0;
    while (s!=e)
    {
    l=200;
    for (i=1;i<=3;i++)
        if ((g[s][i]+puti[s])<puti[i]) puti[i]=puti[s]+g[s][i];
    puti[s]=200;
    for(i=1;i<=3;i++)
        if (puti[i]<l)
        {
        l=puti[i];
        k=i;
        }
    s=k;
    }
ras[n][p]=puti[e];
    }
for (i=1;i<=3;i++)
    {
    for (j=1;j<=3;j++)
        b=ras[i][j];
        printf ("%d",b);
    }
return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.11.2015, 17:34
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Выход за пределы массива (C++):

Выход за пределы массива
Заполняю динамический массив случайными числами и вывожу его на экран. Дебажная...

Выход за пределы массива
#include &lt;assert.h&gt; #include &lt;assert.h&gt; #include &lt;string.h&gt; #include...

Выход за пределы массива
Столкнулся со следующей проблемой. Ввожу по формату: Мой код при выполнении...

Проверка на выход за пределы массива
Есть самый обычный массив int veg; вот так заполняется for (int i = 0; i &lt;...

Проверка на выход на пределы массива
Напишите пожалуста пример кода как этого можна добиться в отдельной функции

3
Melg
538 / 159 / 79
Регистрация: 23.09.2013
Сообщений: 316
07.11.2015, 17:39 #2
Ateller,
C++
1
 puti[3]
В сочетании с:
C++
1
      for (i = 1; i <= 3; i++) puti[i] = 200;
Уже дает выход за пределы массива.
Индексация производится с 0 элемента, по 3 не включительно, например:
C++
1
for (i = 0; i < 3; ++i) puti[i] = 200;
И так во всех местах.

Чтоб было совсем понятно:
C++
1
2
int puti[3];
puti[3] = 100;
Выход за пределы массива.
0
Ateller
0 / 0 / 1
Регистрация: 18.10.2015
Сообщений: 4
07.11.2015, 17:46  [ТС] #3
Цитата Сообщение от Melg Посмотреть сообщение
Ateller,
C++
1
 puti[3]
В сочетании с:
C++
1
      for (i = 1; i <= 3; i++) puti[i] = 200;
Уже дает выход за пределы массива.
Индексация производится с 0 элемента, по 3 не включительно, например:
C++
1
for (i = 0; i < 3; ++i) puti[i] = 200;
И так во всех местах.

Чтоб было совсем понятно:
C++
1
2
int puti[3];
puti[3] = 100;
Выход за пределы массива.
Если начинать индексацию с 0 и до 3 не включительно, то программа будет выводить элемент массива, относящийся не к той вершине, что нужно. Когда я так делал раньше, все работало.
С этим кодом, например, вообще проблем нет.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
#include <conio.h>
#include <stdio.h>
int main()
{
int i,j,s,l,e,k,b,g[8][8],puti[8];
printf ("vvedite matrisu cmejnosti\n");
for (i=1;i<=8;i++) //ввод матрицы смежности
{
    for (j=1;j<=8;j++)
    scanf ("%d",&g[i][j]);
}
printf ("vvedite nomer nachal'noy vershini ");
scanf ("%d",&s); //ввод начальной вершины
printf ("vvedite nomer konechnoy vershini ");
scanf ("%d",&e); //ввод конечной вершины
for (i=1;i<=8;i++)
  puti[i]=200;
puti[s]=0;
while (s!=e)
{
l=200;
for (i=1;i<=8;i++)
 if ((g[s][i]+puti[s])<puti[i]) puti[i]=puti[s]+g[s][i];
puti[s]=200;
for(i=1;i<=8;i++)
 if (puti[i]<l)
 {
     l=puti[i];
     k=i;
 }
s=k;
}
b=puti[e];
printf ("velichina puti ravna ");
printf("%d",b);
getch();
 return 0;
}
0
Melg
538 / 159 / 79
Регистрация: 23.09.2013
Сообщений: 316
07.11.2015, 18:03 #4
Ateller, Ваша программа может работать как Вы запланировали, а может падать, поскольку обращение к памяти, которая не была выделена - undefined behaivor. Можете подробнее изучить про массивы например:
http://www.cplusplus.com/doc/tutorial/arrays/
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2015, 18:03
Привет! Вот еще темы с решениями:

Выход за пределы динамического массива
#include &lt;iostream&gt; using namespace std; int main() { int** mas = new...

Странно: выход за пределы статического массива
if(mines=='*')++i; if(mines=='*')++i; if(mines=='*')++i; ...

Задача коммивояжера - выход за пределы массива
Бьет ошибку! Я так понимаю где-то выход за пределы массива! Народ гляньте кто,...

Выход за пределы массива, обработка исключения
Есть такой код, когда я вызываю функцию на вывод массив еще не инициализирован,...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

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