2016-11-12 3 views
0

Новичок в C и сталкивается с проблемой с функцией, которая инициализирует массив. Составитель в коде: Блоки 16.01 на ОС Windows 10. Специальный код У меня возникли проблемы с является:Процесс завершен со статусом -1073741819 mid loop?

void initAuction(float auction[2][MAXAUCTIONITEMS]) { 
    int i; 

    for (i = 0; i < MAXAUCTIONITEMS; i++) { 
     auction[1][i] = -1; 
     printf("\n%f\t%d\n", auction[1][i], i); 
    }; 
    for (i = 0; i < MAXAUCTIONITEMS; i++) { 
     auction[2][i] = 0; 
     printf("\n\n%f\t%d", auction[2][i], i); 
    } 
    printf("\n%f\n", auction[2][70]); 
    return; 
} 

Я настроил операторы печати, чтобы увидеть, как далеко я получаю до аварии, и я сделать его второй для цикла, но он падает при i = 140. Если я изменю константу (равную 1000), то самая высокая, с которой я могу установить ее без сбоев, - это i < 84 как ни странно. Что вызовет статус завершения -1073741819 в середине цикла, когда первая строка инициализирована без проблем, но строка 2 выбирает сбой около i = 140.

Я пробовал поиск в google и здесь, и кажется, что код завершения не является очень конкретным кодом, так как я видел решения от необходимости использования оператора return, пытающегося получить доступ к тому, что не существует и т. Д. Действительно потерян.

+0

'float auction [2] [MAXAUCTIONITEMS]': ваше первое измерение имеет размер 2, но вы продаете аукцион с аукционом [2] [i] ', выходя за рамки. Помните, что C - 0. – Evert

+0

Как правило, вы должны отправить всю программу, которая демонстрирует ошибку - например. включают в себя «главную», которая делает наименьший объем работы для проявления ошибки. – Hurkyl

+1

Используйте отладчик для решения этих проблем. – Evert

ответ

1

Вы устанавливаете элементы массива за его пределами: начальный размер auction является 2, только действительные значения этого индекса 0 и 1.

Вы можете исправить и упростить код таким образом:

void initAuction(float auction[2][]) { 
    for (int i = 0; i < MAXAUCTIONITEMS; i++) { 
     auction[0][i] = -1; 
     auction[1][i] = 0; 
    } 
} 

Обратите внимание, что второе измерение не является частью типа auction, игнорируется компилятором.

+0

Я ценю ответ. Я не совсем уверен, почему вы работали (даже когда я исправлял индексы), но сейчас я нахожусь на грани хруста, но я хочу узнать больше о завтрашнем дне, если это не проблема. Опять же, не могу вас поблагодарить! –

2

Допустимые индексы: auction[0][*] и auction[1][*].

+0

Итак, я попробовал ваше редактирование, и он все равно падает до 140, но теперь кажется, что случайные индексы во второй строке = случайным значениям вместо нуля. Кроме того, некоторые из этих индексов теперь также содержат буквы? –

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