【发布时间】:2023-03-20 14:39:01
【问题描述】:
我们在我们的游戏引擎的 PNG 解码例程中添加了一些新代码。定义的附加块只是为了读取一些值——没什么大不了的。
在 Visual C++ 上,它编译得很好。在我们主要使用的 GCC 上,我们现在遇到了一个以前从未发生过的奇怪问题:
这是添加的代码:
/* read grAb chunk */
png_unknown_chunk *unknowns;
int num_unknowns = png_get_unknown_chunks(png_ptr, info_ptr, &unknowns);
for (int i = 0; i < num_unknowns; i++)
{
if (!memcmp(unknowns[i].name, "grAb", 4))
{
png_grAb_t *grAb = reinterpret_cast<png_grAb_t *>(unknowns[i].data);
grAb->x = EPI_BE_S32(grAb->x) + 160 - width / 2;
grAb->y = EPI_BE_S32(grAb->y) + 200 - 32 - height;
img->grAb = grAb;
break;
}
}
在我看来还不错。这是添加到我们原始文件中的唯一内容。完整的文件在这里: goto Line 59 of image_data.cc
还有这个爆炸的功能: image_data_c *PNG_Load(file_c *f, int read_flags)
我不明白会发生什么,因为这之前工作得非常好,并且在交叉初始化或我们的案例处理方面从来没有问题。
如果我能得到一些帮助,我将不胜感激!
【问题讨论】:
-
请在问题本身中发布minimal reproducible example。
-
我想的差不多,但奇怪的是 VS 并没有因此而崩溃,而 GCC 则...:S
-
嗯,[0,2] 编译器中的某些东西是正确的。没有 MCVE 就无法判断。