gpt4 book ai didi

c++ - new[] 包含构造函数的字节对象数组没有错,对吧?

转载 作者:可可西里 更新时间:2023-11-01 15:24:50 24 4
gpt4 key购买 nike

在我基于物理的渲染器中,我遇到了一个内存损坏错误(程序崩溃,调试器提供了一个毫无值(value)的虚假堆栈跟踪)。我追溯到这个 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 不会出现此问题,只有 Intel Compiler(版本为 16.0)才会出现此问题。但是,由于这是一个内存损坏错误,所以这实际上没有任何意义。在我提交错误报告之前,有人可以确认这不是我滥用 C++ 吗?


Here是演示问题的预制解决方案。 Here是程序集。

最佳答案

如评论中所述,通过一系列越来越简单的示例(和相应的编辑),这是完全有效的 C++ 代码。

我发布了 a bug report在英特尔的开发者论坛上,并已得到官方确认。

关于c++ - new[] 包含构造函数的字节对象数组没有错,对吧?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36065576/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com