Меню Закрыть

Вызвано необработанное исключение нарушение доступа для чтения

Содержание

Индексы массивов начинаются с нуля. Поэтомуy = rand() % 26; e = rand() % 26;

Почему берется остаток от деления именно на 26? Откуда взялось 26? Число букв в латинском алфавите? Ну так тогда, наверное, и в массиве необходимо все 26 букв алфавита указать.

Описание проблемы Problem Description

Программа порождает нарушение доступа. My program produces an access violation. Как это отладить? How can I debug this?

Решение Solution

Если вы получаете нарушение прав доступа в строке кода, которая разыменовывает несколько указателей, может быть трудно определить указатель, который вызвал нарушение прав доступа. If you get an access violation on a line of code that dereferences multiple pointers, it can be difficult to find out which pointer caused the access violation. Начиная с Visual Studio 2015 с обновлением 1 диалоговое окно исключения теперь явно называет указатель, который вызвал нарушение прав доступа. Starting in Visual Studio 2015 Update 1, the exception dialog box now explicitly names the pointer that caused the access violation.

Например, если имеется следующий код, вы должны получить нарушение прав доступа: For example, given the following code, you should get an access violation:

При выполнении этого кода в Visual Studio 2015 с обновлением 1 вы увидите следующее диалоговое окно исключения: If you run this code in Visual Studio 2015 Update 1, you should see the following exception dialog:

Если не удается определить, почему указатель вызвал нарушение прав доступа, выполните трассировку кода, чтобы проверить правильность назначения указателя, ставшего причиной проблемы. If you cannot determine why the pointer caused an access violation, trace through the code to make sure that the pointer causing the problem has been assigned correctly. Если он передается как параметр, убедитесь, что он передается правильно и вы не создаете случайно неполную копию. If it is passed as a parameter, make sure that it is passed correctly, and you aren’t accidentally creating a shallow copy. Затем проверьте, не изменяются ли непреднамеренно значения где-нибудь в программе путем создания точки останова по данным для рассматриваемого указателя, чтобы убедиться, что он не изменяется в другом месте программы. Then verify that the values are not being unintentionally changed somewhere in the program by creating a Data Breakpoint for the pointer in question to make sure it isn’t being modified elsewhere in the program. Дополнительные сведения о точках останова по данным см. в разделе, посвященном точкам останова по данным, в статье Using Breakpoints. For more information about data breakpoints, see the data breakpoint section in Using Breakpoints.

Читайте также:  Современный плеер для музыки

Закрыт по причине того, что не по теме участниками rjhdby, Harry, insolor, Abyx, andreymal 15 авг ’17 в 9:05 .

Похоже, этот вопрос не соответствует тематике сайта. Те, кто голосовал за его закрытие, указывали следующую причину:

  • "Вопросы с просьбами помочь с отладкой («почему этот код не работает?») должны включать желаемое поведение, конкретную проблему или ошибку и минимальный код для её воспроизведения прямо в вопросе. Вопросы без явного описания проблемы бесполезны для остальных посетителей. См. Как создать минимальный, самодостаточный и воспроизводимый пример." – rjhdby, Harry, insolor, Abyx, andreymal

Если вопрос можно переформулировать согласно правилам, изложенным в справке, отредактируйте его.

2 ответа 2

Падение происходит в функции

потому что pbeg равно 0 (NULL). А такое нужно проверять.

Также в коде замечено много утечек памяти и просто плохого кода. Например,

    run_busses *R = new run_busses; — а удалять кто будет?

if (pv->buss_number = buss_number)break; в функции run_busses::find . Там точно одно равно? Возможно, это и будет причина этого падения. Там ещё в одном месте есть подобное. Такой код конечно может быть, но очень сильно с душком.

  • обилие strcpy_s и char[50] . Может просто std::string? c++ же в метках.
  • #include . просто не используйте.
  • main должна возвращать int.
  • setlocale(0, "rus"); и OemToCharA — смените преподавателя или учебник.
  • Рекомендуем к прочтению

    Добавить комментарий

    Ваш адрес email не будет опубликован.