微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 C 中为整数分配 double 会导致程序崩溃

如何解决在 C 中为整数分配 double 会导致程序崩溃

我正在用 C 语言开发一个可视化应用程序来渲染一些烟花爆炸作为一个学习项目。为了控制它们上升的速度,我有一个像这样的速度变量:

typedef struct Firework
{
    //Other data on the struct
    int speed;
} Firework;

我还需要为每个烟花初始化 speed 变量,所以下一段代码是这样的:

// this works:
const int maxSpeed = 1;

// however if replaced with this,then the program will crash inside the loop
// const int maxSpeed = 0.5;

Firework fireworks[5] = { 0 };
for(size_t i = 0; i < sizeof(fireworks) / sizeof(fireworks[0]); i++)
{
    fireworks[i].speed = (rand() % maxSpeed) + 1;
}

问题是,我错误地将值 0.5 分配给 maxSpeed,结果是程序启动,然后在我尝试使用 maxSpeed 时几乎立即终止。我意识到错误并修复了它,但不幸的是我在网上找不到太多东西,还有一些我不明白的地方:

在 C 中使用 double 来初始化整数是一种未定义的行为吗?

如果是这样,为什么我的编译器没有收到任何错误或警告消息? (Mingw-w64)

是什么导致应用程序终止(有时甚至退出代码为 0)而不是行为异常?

maxSpeed 变量 const 是否与此有关?

解决方法

0.5 转换为整数是 zero。然后使用模 % 运算符将 rand 函数的结果除以零 - 这当然会在大多数硬件平台上终止程序。这是未定义的行为。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。