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)
你应该像这样分配它
uint32_t *rom = malloc(rom_size * sizeof(uint32_t));
Run Code Online (Sandbox Code Playgroud)
在目前的情况下,你的阵列比你预期的要小四倍.