gpt4 book ai didi

平台之间的 C 枚举大小不匹配有潜在危险

转载 作者:行者123 更新时间:2023-12-04 00:06:53 26 4
gpt4 key购买 nike

我从 Linux x86 机器上的工作编译开始将 net-snmp 移植到 ARM 平台(ThreadX 操作系统,而不是 linux)

现在程序在 init_snmp() 函数内崩溃,因为在某些时候内存发生了一些可怕的事情。

然后我面对所有数据类型的 sizeof(),发现 enum 在 Linux x86 上是 4 个字节,在 ARM 上是 1 个字节。

这种不匹配是否可能对内存分配造成严重破坏?程序在尝试将字符串写入内存时崩溃。

如何在 ARM 上也强制枚举大小为 4 个字节?

我正在用 gcc arm-none-eabi 编译

最佳答案

Is it possible that such mismatch wreaks havoc with memory allocation?

哦,是的。

How do I force the enum to be 4 bytes large on ARM too?

C 标准规定枚举变量可以具有几乎任何整数类型,大小和符号是实现定义的。由于这个原因,使用枚举通常会有问题,特别是在嵌入式系统中。这是 C 语言的一个已知缺陷。

您可以强制枚举为特定编译器的特定大小,但这只是一个快速且肮脏的修复。

专业的、长期的解决方案是重写所有代码,以便在任何地方都不依赖枚举的大小或签名。

关于平台之间的 C 枚举大小不匹配有潜在危险,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39167542/

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