2014-09-01 2 views
-3

Я пытаюсь инициализировать массив из 32-разрядных целых чисел bu, по какой-то причине отладчик (MSVC) выдает исключение на полпути через процесс записи.Нарушение прав доступа при записи значения массива внутри диапазона

Массив длинные 1048576 элементы
терпит неудачу на итерации 263152

#define ROM_MAX_SIZE (1024*1024*4) 
int main(){ 
    size_t rom_size = ROM_MAX_SIZE/sizeof(uint32_t); 
    uint32_t *rom = malloc(rom_size); //<-- Error here, must be ROM_MAX_SIZE. See edit 

    for (uint32_t i = 0; i < rom_size; i++){ 
     rom[i] = i; //<--- Access violation here 
    } 
free(rom); 
return 1 
} 

я мог отсутствовать что-то очевидное, но я не вижу его.


Edit:

Malloc должен быть в 4 раза количество элементов.

uint32_t *rom = malloc(rom_size); //<--- WRONG! 
uint32_t *rom = malloc(ROM_MAX_SIZE); //<--- OK. 
+0

Почему, на ваш взгляд, это диапазон? – juanchopanza

+0

Отладчик терпит неудачу, когда i == 263152 * путь * ниже размера массива 1048576. Как указано в сообщении, juuust выше кода. – NeonMan

+0

Malloc - размер четверти. должен быть ROM_MAX_SIZE, а не ROM_MAX_SIZE/4 – NeonMan

ответ

5

Вы должны передать его как этот

uint32_t *rom = malloc(rom_size * sizeof(uint32_t)); 

в текущей ситуации, ваш массив в четыре раза меньше, чем вы ожидали.

+0

Только что заметил и отредактировал его. В любом случае, ответьте. – NeonMan