代码之家  ›  专栏  ›  技术社区  ›  NeonMan

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

  •  -3
  • NeonMan  · 技术社区  · 10 年前

    我正在尝试初始化一个32位整数数组,但由于某种原因,调试器(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 回复  |  直到 10 年前
        1
  •  5
  •   j123b567    10 年前

    你应该这样分配

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

    在当前情况下,您的阵列比预期的小四倍。