Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
mozg-bolit
3 / 3 / 5
Регистрация: 20.09.2014
Сообщений: 276
#1

Почему вылетает программа при 32768, а при 20 все работает нормально?

05.04.2017, 19:34. Просмотров 815. Ответов 8
Метки нет (Все метки)

Помогите исправить, почему программа вылетает при больших числах, а если поставить маленькие то все норм.
то есть если 32768 заменить на 20, а 16384 на 10 то программа нормально работает.
А с такими числами нет, отладчик показал на atoi( mas2[q].c_str());
Помогите исправить, я использую компилятор GNU GCC

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
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#include <iostream>
#include <stdio.h>
#include <cstring>
#include <string>
#include <fstream>
#include <stdlib.h>
#include <sstream>
using namespace std;
int main(){
char finame[ 25 ];
int gg;
printf( "Enter the name of file: \n" );
scanf( "%s", finame );
ifstream fin(finame);
if (!fin)
{
cout << "Error opening file!" << endl;
cin.get();
return 0;
}else{
char c; int i1=0,i0=0;
string mas2[32768];
size_t i = 1;
while ((fin >> c) && i < 32768)
{
if (c =='1')i1++; if((i1==16384)&&(i0==0)){cout<<"bad"; gg=1; break;}
if (c =='0')i0++; if((i0==16384)&&(i1==0)){cout<<"bad"; gg=1; break;}
mas2[i++] = c;
}
int sovpad=0;
int nosovpad=0;
for(int t=1; t<=16384; t++)
{
int sum=0;
for (int q = t; q >=1; q--) /*Считаем сумму на числе котором мы находимся*/
{
sum= sum + atoi( mas2[q].c_str());
}
int newt=t+1; int schet=0; int sums=0;
for(int t1=newt; t1<=32768; t1++)
{
/* разобьем все оставшиеся числа по t и посчитаем суммы и сравним кажное с sum*//* */
int schetchik=0;
/*берем по t значений и суммируем*/
schet++;
sums= sums + atoi( mas2[t1].c_str());
if(schet==t){schet=0; if(sum==sums){sovpad++;}else{nosovpad++;} sums=0;}
}
if((sovpad>=3)&&(nosovpad<=1)){cout<<"bad"; gg=1;
break;
}
sovpad=0;
nosovpad=0;
}
if(gg!=1){cout<<"good";}
fin.close(); // закрываем файл
}
cin.get();
return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.04.2017, 19:34
Ответы с готовыми решениями:

Почему при вводе числа программа работает нормально, а при вводе буквы уходит в бесконечный цикл?
void mainmenu() { cout &lt;&lt; &quot;Введи число&quot; &lt;&lt; endl; cin &gt;&gt; choice; if (choice...

Почему программа выдает ошибку при первом запуске, а дальше работает нормально? Код C
Подскажите почему программа выдает ошибку при первом запуске, а дальше работает...

Почему программа вылетает при конкатенации строк?
Собственно код #ifndef __STRING #define __STRING #include &lt;ostream&gt; ...

Почему при матрице 19х19 считает, а при 20х20 вылетает?
Здравствуйте, искал решение задачи коммивояжера полным перебором нашел тут: ...

Почему при умножении на 0, программа работает правильно?
Операции ввода, такие, как cin, должны уметь преобразовывать последо-...

8
nmcf
6265 / 5575 / 2534
Регистрация: 14.04.2014
Сообщений: 23,468
05.04.2017, 22:04 #2
Индексация массивов - с нуля.
0
mozg-bolit
3 / 3 / 5
Регистрация: 20.09.2014
Сообщений: 276
05.04.2017, 22:43  [ТС] #3
это понятно. но это ни на что не влияет в данном случае !
0
nmcf
6265 / 5575 / 2534
Регистрация: 14.04.2014
Сообщений: 23,468
05.04.2017, 22:52 #4
Цитата Сообщение от mozg-bolit Посмотреть сообщение
это ни на что не влияет
Ну значит ты плохо понял.
Вот здесь при t = 32768 будет q = 32768, а после mas2[32768].
C++
1
2
3
4
5
6
7
for(int t=1; t<=16384; t++)
{
int sum=0;
for (int q = t; q >=1; q--) /*Считаем сумму на числе котором мы находимся*/
{
sum= sum + atoi( mas2[q].c_str());
}
0
mozg-bolit
3 / 3 / 5
Регистрация: 20.09.2014
Сообщений: 276
05.04.2017, 23:02  [ТС] #5
И у меня объявлено mas2[32768]; того там 32768+1 нулевое значение которое я пропускаю, так и я же писал выше, что при замене 32768 на 20 и 16384 на 10, все работает нормально, файлы подаются соответсвующие на 32768 и 20 символов
0
nd2
2830 / 2399 / 1055
Регистрация: 29.01.2016
Сообщений: 8,037
05.04.2017, 23:15 #6
Цитата Сообщение от mozg-bolit Посмотреть сообщение
И у меня объявлено mas2[32768]
Значит индекс, равный 32768 - это выход за пределы выделенной памяти.
Цитата Сообщение от mozg-bolit Посмотреть сообщение
C++
1
2
3
4
5
6
7
for(int t1=newt; t1<=32768; t1++)
{
/* разобьем все оставшиеся числа по t и посчитаем суммы и сравним кажное с sum*//* */
int schetchik=0;
/*берем по t значений и суммируем*/
schet++;
sums= sums + atoi( mas2[t1].c_str());
0
mozg-bolit
3 / 3 / 5
Регистрация: 20.09.2014
Сообщений: 276
05.04.2017, 23:49  [ТС] #7
И как тогда это исправить ?
0
nd2
2830 / 2399 / 1055
Регистрация: 29.01.2016
Сообщений: 8,037
05.04.2017, 23:53 #8
Лучший ответ Сообщение было отмечено mozg-bolit как решение

Решение

Цитата Сообщение от mozg-bolit Посмотреть сообщение
И как тогда это исправить ?
Не ставь <=, просто < .
1
zss
Модератор
Эксперт С++
7059 / 6604 / 4179
Регистрация: 18.12.2011
Сообщений: 17,404
Завершенные тесты: 1
06.04.2017, 08:59 #9
И еще
Цитата Сообщение от mozg-bolit Посмотреть сообщение
string mas2[32768];
Такое количество строк может не поместится в стеке.
Сделайте этот массив глобальным.
1
06.04.2017, 08:59
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.04.2017, 08:59

Почему работает программа при выходе за пределы массива?
Добрый день, возникла проблема. Я задал одномерный массив из 10 элементов,...

Почему при инициализации данных программа работает быстрей?
Почему при инициализации данных программа работает быстрей?

Почему не работает программа при некоторых входных данных
Задание найти первый и последний неотрицательные эллементы массива. и...


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

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

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