在我的基于物理的渲染器中,我遇到了内存损坏错误(程序崩溃,调试器提供了一个毫无价值的虚假堆栈跟踪)。我追溯到SSCCE。带有构造函数的行似乎是触发错误的原因:
#include <cstdint>
class Foo final {
public:
uint8_t packed;
public:
inline Foo(void) : packed(0xFF) {} //causes error
inline ~Foo(void) = default;
};
static_assert(sizeof(Foo)==sizeof(uint8_t),"Implementation error!");
int main(int /*argc*/, char* /*argv*/[]) {
Foo* arr = new Foo[4]; //Tried a bunch of different sizes. All fail.
delete [] arr;
return 0;
}
MSVC或GCC不会出现此问题,只有英特尔编译器(其版本为16.0)。但是,由于这是一个内存损坏错误,这并不意味着什么。在我提交错误报告之前,有人可以确认这不是我误用C ++吗?
答案 0 :(得分:5)
正如评论中所确定的,通过一系列越来越简单的示例(以及相应的编辑),这是完全有效的C ++代码。
我在英特尔的开发者论坛上发布了a bug report,并且已经正式确认。