发现一个C语言BUG,定义int变量时靠近char的变量会变成0,是什么原因?

小干探


很多开发人员都有过这样的经历,当被一些稀奇古怪的问题折腾得精疲力尽时,就开始怀疑开发环境的问题,怀疑编译器的问题,怀疑运行时的问题,甚至开始怀疑人生[捂脸]

没错,我也遇到过,不过最终发现,开发环境、编译器和运行时出 bug 的概率太低了,比买双色球中奖的概率还低。问题还是自己的问题,只是定位问题的过程比较曲折而已。

题主所说的问题大概有这两种情况:

1,定义变量没赋初值,这种情况下变量值是不确定的,可以是任何值,也可能是 0。

2,变量在某个时候被其他地方修改了,如通过指针的方式修改,或调用函数时引用传参并被修改。 这两种方式在代码层面可能不太直观,容易被忽略。

所以题主可以试下按照我说的情况加以分析定位问题。


熙爸爱钓鱼


char[3];

uint8 i;

char="ABCD";

//字符串赋值时会在字符串的最后自动加上一个0x00,此时就会把后面的整数i变成0了。

还有一种可能,是你定义了一个char变量,但是赋值的时候你用了双引号,就变成了字符串赋值了。如char a="A"; //此时会给a赋一个值'A',同时在后面一个BYTE中写一个0正好就是整数i的位置,i就被清零了。

认为错了的告诉我哪错了。


芝麻小龙


应该是你代码的bug,不是语言的bug,内存对齐,内存泄露,运行时存在野指针访问表像都有可能是你所谓的问题,但绝对不是语言的问题。


LegendaryMK


初始化的问题吧,或者说你定义的变量是全局变量,重新进来的时候又初始化了。问题描述的不清楚,开发平台是什么。最好把代码放上来看看


小羊看科技


你咋不说Python的round四舍五入?个别不准确。还有小数相加会多0.00000000000xxx


IT小白鼠


上代码啊,你的表述没人看懂


a不帅的大叔a


这个问题简直太扯了,自己检查下代码,尤其是符号和括号什么的


钢铁皮皮虾


谁跟我一样是码农,编译一个程序要花上二十分钟,无聊的等待,来刷头条。

题主说的这个不是语言问题,一般都是自己变量初始化,或者编译器问题,删除编译文件重新编译试一试。


阿财201811


定义整型变量后你不给他赋值,直接输出就是0,devC++实测


1976553400


局部变量未初始化的是随机值(esp栈-sizeof(type)保留位置罢了,内容是垃圾值)。

全局/静态未初始化变量是在 bss段,运行时全零化(.lcomm varName N指定字节罢了)


分享到:


相關文章: