2015-11-02 5 views
0

Написал некоторый код для университетской курсовой работы. Этот код хорошо компилируется и работает на машинах в университете, но не работает на моем личном ноутбуке. Я использую Visual Studio 2013 (так же, как в Uni), запуская Windows 10 через bootcamp на Macbook 2015 года.Необработанное исключение в (msvcr120d.dll)

Код компилирует в порядке - печатает первые несколько строк в консоли - затем выдается сообщение со следующей ошибкой.

«Необработанное исключение в 0x56BEA9E8 (msvcr120d.dll) в ConsoleApplication3.exe: 0xC0000005: место обнаружения нарушения доступа 0xCCCCCCC0."

int main() 
{ 
    string wheel1[3], wheel2[3], wheel3[3]; 

    for (int counter = 0; counter < 4; counter++) { wheel1[counter] = getSuit(); } 
    for (int counter = 0; counter < 4; counter++) { wheel2[counter] = getSuit(); } 
    for (int counter = 0; counter < 4; counter++) { wheel3[counter] = getSuit(); } 

    return 0; 
} 

Попробовали найти решения - но они, как правило, указывают на плохое кодирование.

Просмотрели все, что было похоже на другие ошибки, которые я нашел, но ничего не выпрыгивает на меня.

Также не уверен, почему этот код будет работать безупречно на одной машине, а не на другой ...

Все очень оцененная ..!

  • @Ian, Кажется, в dbgdel.cpp _ASSERTE(_BLOCK_TYPE_IS_VALID(pHead->nBlockUse));, как назвало for (int counter = 0; counter < 4; counter++) { wheel1[counter] = getSuit(); }

    • Edit: Удалил весь код ненужных ошибок.
+1

Вы действительно должны выяснить, какая именно строка вызывает исключение. – Ian

+0

Когда в * ваш * код происходит сбой? –

+0

Редактирование внизу, когда происходит отладка. – Jack

ответ

1

Ваш массив колесо1, wheel2 и wheel3 выделяет память для 3 строки объектов в то время как в течение цикла вы будете пытаться получить доступ к 4-й элемент, для которого пространство не было выделено.

for (int counter = 0; counter < 4; counter++) { wheel1[counter] = getSuit(); } 

В какой-то момент счетчик станет 3, а затем ваш код попытается получить доступ к блоку памяти незаконно. Либо измените свою петлю так, чтобы счетчик прошел до 3, либо увеличил размер массива на 1.

+0

...: ') Это должно было быть что-то смешное ...! Проблема решена! - Теперь о той части, где я бросаю свои университетские компьютеры из окна, чтобы не набирать это! Большое спасибо. – Jack

+0

@Jack Это не имеет ничего общего с компьютерами, «не набирающими на это». Когда вы получаете доступ к элементу массива, который выходит за рамки, поведение программы становится неопределенным. Это означает, что все может случиться, в том числе «работа», а не работа, работа сегодня, а не завтра, работа на 1000 компьютеров и сбой на компьютере 1,001. – PaulMcKenzie

Смежные вопросы