for(int i; i < SCREEN_WIDTH*SCREEN_HEIGHT*4; i+=4) {
Вы никогда не устанавливаете здесь начальное значение для i
, поэтому оно будет иметь некоторое неопределенное значение, и на практике, вероятно, оно будет достаточно большим, чтобы оно вообще никогда не зацикливалось.c и c ++ не инициализируют локальные типы примитивов по умолчанию, вы должны установить значение.
for(int i = 0; i < SCREEN_WIDTH*SCREEN_HEIGHT*4; i+=4) {
Что касается EXC_BAD_ACCESS
, вы должны передать неправильный адрес или размер памяти в memset
.Может быть, другая неинициализированная переменная?
В C / C ++ доступ к памяти вне объекта часто не имеет возможности перехватить ошибку (в отличие от многих других языков, которые будут проверять диапазон при каждом доступе к массиву, например, IndexOutOfRangeException
),и он просто перезапишет несколько случайных байтов, и, возможно, если вам повезет, это абсолютно неверное расположение в памяти, а ОС / процессор выдаст ошибку.