我试图初始化一个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
}
我可能会遗漏一些显而易见的东西,但我看不到它。
编辑:
Malloc必须是元素数量的4倍。
uint32_t *rom = malloc(rom_size); //<--- WRONG!
uint32_t *rom = malloc(ROM_MAX_SIZE); //<--- OK.
答案 0 :(得分:5)
您应该像这样分配
uint32_t *rom = malloc(rom_size * sizeof(uint32_t));
在目前的情况下,你的阵列比预期的要小四倍。