Где нарушение прав доступа находится мой код? - PullRequest
1 голос
/ 01 октября 2011

Я получаю нарушение прав доступа при попытке запустить этот код, который находит простые числа в границах.

int main () {
    cout << "Program initialized successfully. Please wait for the next message to appear." << endl << endl ;

    int Primes[51] ;
    int runner = 0 ;
    int chaser = 0 ;
    int bound = 0 ;
    int count = 0 ;

    cout << "Please enter the maximum boundary of the calculation : " ;

    cin >> bound ;

    cout << endl << "The number you've entered, " << bound << ", has been accepted. Please wait for the calculations." << endl ;

    if (runner <= bound ) {
        Primes[0] = 2;
        Primes[1] = 3;
        Primes[2] = 5;
        Primes[3] = 7;
        Primes[4] = 11;
        count = 4;

        for ( runner = 11 ; runner <= bound ; runner ++ ) {
            while ( runner % Primes[chaser] != 0 ) {
                for ( chaser = 0 ; Primes[chaser] != 0 ; chaser ++ ) {
                    if ( runner % Primes[chaser] == 0 ) {
                        count ++ ;
                        Primes[count] = runner;
                    }
                }
            }
        }

        int chaser_count;
        cout << "Here's the primes computer discovered : " << endl ;
        for ( chaser_count = 0 ; chaser_count <= count ; chaser_count ++ ) {
            cout << Primes[chaser_count] << endl ;
        }
        cout << "There is " << count << " primes discovered." << endl ;
    }
    return 0;
}

Программа работает нормально до строки вычисления: if (runner <= bound) </p>

Я получил нарушение прав доступа.

Я знаю, что такое нарушение прав доступа, но я не знаю, что его вызвало.

edit:

Сейчас я получил 2 ответа, в которых говорится, что у меня может происходить что-то вроде простых чисел [50], но я серьезно сомневаюсь в этом, потому что я получаю ошибку сразу после того, как укажу границу, 12.

Спасибо запарень, который комментирует это.

Я использую Dev-C ++.

Я нашел место, где возникла ошибка.Спасибо всем, кто прокомментировал и ответил за меня.Это логическая ошибка, которую я не нашел, которая приводит к прайму [51].

Спасибо всем за помощь.

1 Ответ

2 голосов
/ 01 октября 2011

Здесь:

for ( chaser = 0 ; Primes[chaser] != 0 ; chaser ++ ) {

Вы не инициализировали свой массив Primes с 0, поэтому цикл может повторяться снова и снова, и Chaser может быть больше 51 (размер вашего массива простых чисел), и тогда Primes[something_bigger_than_50] вызовет нарушение прав доступа.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...