C最早的未定义的行为是什么?

C最早的未定义的行为是什么?,第1张

概述我知道未定义的行为可能会导致任何事情,这使任何包含UB的程序可能无意义.我想知道是否有任何方法来确定程序中最早的一点,即未定义的行为可能会导致问题. 这是一个例子来说明我的问题. void causeUndefinedBehavior(){ //any code that causes undefined behavior //every time it is run char 我知道未定义的行为可能会导致任何事情,这使任何包含UB的程序可能无意义.我想知道是否有任何方法来确定程序中最早的一点,即未定义的行为可能会导致问题.
这是一个例子来说明我的问题.
voID causeUndefinedBehavior(){   //any code that causes undefined behavior   //every time it is run   char* a = nullptr;   *a;}int main(){ //code before call //... causeUndefinedBehavior(); //code after call //...}

从我的理解,可能的时间未定义的行为可以被唤起(不一定表现)是:

>当causeUndefinedBehavior()被编译时.
>当main()被编译时.
>程序运行时.
>在此时,causeUndefinedBehavior()被执行.

或者是对于每种情况和每个实施情况,引起不确定行为完全不同的点?

另外,如果我注释掉了causeUndefinedBehavior()被调用的行,那么会消除UB,还是会在程序中,因为包含UB的代码被编译?

解决方法 由于您的代码有所演示,未定义的行为几乎总是在尝试行为时运行时状态的一个条件.对你的代码进行一些修改可以使这一点显而易见:
voID causeUndefinedBehavior(){   //any code that causes undefined behavior   //every time it is run   char* a = nullptr;   *a;}int main(){ srand(time(NulL)); //code before call //... if (rand() % 973 == 0)    causeUndefinedBehavior(); //code after call //...}

你可以执行这一千次以上,永远不要去执行UB执行条件.这并不改变函数本身显然是UB的事实,而是在调用者的上下文中编译时检测它不是微不足道的.

总结

以上是内存溢出为你收集整理的C最早的未定义的行为是什么?全部内容,希望文章能够帮你解决C最早的未定义的行为是什么?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1252890.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存