Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/137.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 读操作后的堆栈粉碎_C++_Googletest - Fatal编程技术网

C++ 读操作后的堆栈粉碎

C++ 读操作后的堆栈粉碎,c++,googletest,C++,Googletest,我有以下代码片段: static uint8_t decode_uint8(const uint8_t *& data) { return *(data++); } 为了验证功能,我使用了以下测试: TEST(FOO, Decode8) { const uint8_t stream[] = { 0xAA, 0xBB }; const uint8_t* data = &stream[0]; ASSERT_EQ(0xAA, decode_uint8

我有以下代码片段:

static uint8_t decode_uint8(const uint8_t *& data)
{
    return *(data++);
}
为了验证功能,我使用了以下测试:

TEST(FOO, Decode8)
{
    const uint8_t stream[] = { 0xAA, 0xBB };

    const uint8_t* data = &stream[0];
    ASSERT_EQ(0xAA, decode_uint8(data));
    ASSERT_EQ(0xBB, decode_uint8(data));
}
之后我得到:

[==========] Running 1 test from 1 test suite.
[----------] Global test environment set-up.
[----------] 1 test from TDebugLog
[ RUN      ] TDebugLog.Decode8
*** stack smashing detected ***: <unknown> terminated
Aborted (core dumped)
我在Ubuntu 18.04上使用了g++8.3.0。
你知道为什么会发生这种情况吗?

你的ASSERT_EQ宏会不止一次地计算它的参数吗?它在Google测试之外工作:@MikeVine It's GTEST宏。我已经检查了数据的地址,在每个ASSERT_EQ行之后,数据的地址会增加一,所以我会说nodefine一个虚拟的一,比如define MY_ASSERT_EQx,y do{ifx!=yprintfNot equal;}while0,看看这是否有区别。根据:参数总是精确计算一次。因此,参数有副作用是可以的@Quest你的调试器对崩溃说了什么?你的ASSERT_EQ宏是否以某种方式多次计算其参数?在GoogleTest之外工作:@MikeVine It's GTEST宏。我已经检查了数据的地址,在每个ASSERT_EQ行之后,数据的地址会增加一,所以我会说nodefine一个虚拟的一,比如define MY_ASSERT_EQx,y do{ifx!=yprintfNot equal;}while0,看看这是否有区别。根据:参数总是精确计算一次。因此,参数有副作用是可以的@Quest你的调试器对崩溃说了什么?