Member 14586345 Ответов: 2

Как исправить ошибку закрытия программы ?


привет всем сегодня я столкнулся с новой ошибкой, и я не знаю причины. пожалуйста, помогите мне.
когда я запускаю код появляется эта ошибка :
это приложение запросило,чтобы среда выполнения завершила его необычным способом.

Что я уже пробовал:

#include <bits/stdc++.h>
#include <iostream>
#include <cmath>

using namespace std;

// Complete the repeatedString function below.
long repeatedString(string s, long n) {

   long counter=0 ;

for (int i=0 ; i<(n/s.size())+1 ; i++) {

        for (int k=0 ; k<s.size() ; k++) {
            s+=s[k] ;

            if (s.size()==n) {
                break ;
            }
        }

            if (s.size()==n) {
                break ;
}
}

for (int u=0 ; u<s.size() ; u++) {
    if (s[u]=='a') {
        counter++ ;
    }
}

return counter;
}

int main() {

cout <<repeatedString("a",1000000000) ;

return 0;
}

Afzaal Ahmad Zeeshan

Это не поможет нам понять проблему, пожалуйста, запустите программу с отладчиком.

CPallini

Что должен делать ваш код?

2 Ответов

Рейтинг:
2

KarstenK

А как насчет отладки вашего кода? Это общая задача.

Прочтите этот учебник о том, как основные тактики отладки чтобы расширить свои навыки.


Рейтинг:
0

Rick York

Я думаю, что вы превышаете доступное пространство памяти процесса. Посмотрите на петли. Внутренний идет от 0 до s.size(). В цикле вы добавляете часть строки к себе. Каждый раз, когда вы делаете это, размер строки становится больше, пока размер не сравняется с переданным значением. Что произойдет, если размер никогда не будет соответствовать n? Цикл for будет продолжаться до тех пор, пока не будет использована вся доступная память, а затем процесс завершится.

Попробуйте изменить свои чеки на if( s.size() >= n ).

Кроме того, попробуйте передать меньшие числа, чтобы убедиться, что логика работает так, как вы ожидаете. Начните с небольших значений, таких как 10, а затем постепенно увеличивайте число на порядки и смотрите, как долго оно может работать. Я имею в виду, попробуйте 10, 100, 1000, 10000 и т. д...