在范围内写入数组值时发生访问冲突

Neo*_*Man -3 c arrays access-violation visual-c++

我正在尝试初始化一个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
}
Run Code Online (Sandbox Code Playgroud)

我可能会遗漏一些明显但我看不到的东西.


编辑:

Malloc必须是元素数量的4倍.

uint32_t *rom = malloc(rom_size); //<--- WRONG!
uint32_t *rom = malloc(ROM_MAX_SIZE); //<--- OK.
Run Code Online (Sandbox Code Playgroud)

j12*_*567 5

你应该像这样分配它

    uint32_t *rom = malloc(rom_size * sizeof(uint32_t));
Run Code Online (Sandbox Code Playgroud)

在目前的情况下,你的阵列比你预期的要小四倍.