首页 > 解决方案 > ::memset 在初始化大型数组时崩溃

问题描述

我正在编写一个旨在处理大量数据的 C++ 程序。我正在测试一个特定的函数HVE_KeyGen(),它接收一个大数组以及其他参数。我写了一个函数TestFunction()来测试HVE_KeyGen(). 现在,这个函数是空的,只有return 0语句。该程序正在编译,没有任何错误。但是,当我执行 TestFunction 时,程序崩溃(SIGSEGV 错误)。在调试时,我注意到这::memset(v_vec,0xF0,262144);是导致崩溃的原因。如果我将此行更改为::memset(v_vec,0x00,262144);,程序不会崩溃。虽然我可以使用 for 循环将内容初始化为 0xF0,但我仍然更喜欢使用memset. 知道为什么会发生这种情况以及如何解决吗?提前致谢。

int TestFunction(){

    uint8_t v_vec[262144];
    uint8_t hve_d0[16];
    uint8_t hve_d1[16];
    uint8_t hve_S[262144];
    uint8_t x_vec[262144];
    uint8_t hve_c_vec[4194304];

    ::memset(v_vec,0xF0,262144);//This causes crash

    ::memset(hve_d0,0x00,16);
    ::memset(hve_d1,0x00,16);
    ::memset(hve_S,0x00,262144);

    ::memset(x_vec,0x00,262144);
    ::memset(hve_c_vec,0x00,4194304);

    for(int i=0;i<262144;i++){
        v_vec[i] = 0xF0;
    }

    //msk is a global variable; hve_d0, hve_d1, and hve_S store output data
    HVE_KeyGen(hvemsk, v_vec, hve_d0, hve_d1, hve_S);

    return 0;
}

标签: c++memorysegmentation-faultc++17memset

解决方案


推荐阅读