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

时间:2014-09-01 12:58:37

标签: c arrays visual-c++ access-violation

我试图初始化一个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.

1 个答案:

答案 0 :(得分:5)

您应该像这样分配

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

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