煮酒fu 发表于 2014-8-12 14:41:32

变量定义出错,导致程序跑飞。请教下原因。

unsigned char dis;
void send_printf(int value)
{
        unsigned char i;
        printf(dis , value);
        for(i=0;i<6;i++)
        {
                SendData(dis);
        }
}
为了省事,直接在函数的上面把变量定义了。printf(dis , value);dis传递的是指针变量,就是数组的地址。
但是在调试的时候,发现程序运行,老是出问题。于是 unsigned char dis;放到程序的开头就好了。
呵呵,问题是找到了,但是具体的原因还不是很清楚,所以想问问大家。


iquer 发表于 2014-8-12 15:18:55

楼主描述的清楚一点……

tohell 发表于 2014-8-12 15:27:16

这printf是什么用法
dis做全局变量,被初始化为0,相当于空字符串,printf啥都没做
dis做局部变量,那里面是什么就不知道了

煮酒fu 发表于 2014-8-12 15:50:34

tohell 发表于 2014-8-12 15:27
这printf是什么用法
dis做全局变量,被初始化为0,相当于空字符串,printf啥都没做
dis做局部变量,那里面 ...

void sdgbfrb(int value)
{
       nrtngtfrngfhn;
}

unsigned char dis; 我的意思是我把变量加在代码中间了。

void send_printf(int value)
{
      unsigned char i;
      printf(dis , value);   //这个是我写的一个封装函数,不用管它。
      for(i=0;i<6;i++)
      {
                SendData(dis);
      }
}

zhugean 发表于 2014-8-12 15:54:14

堆栈溢出!!!!!!!!!!!!!

煮酒fu 发表于 2014-8-12 16:14:07

zhugean 发表于 2014-8-12 15:54
堆栈溢出!!!!!!!!!!!!!

能详细说几句不?

maimaige 发表于 2014-8-12 16:28:00

是不是编译器给优化了,把优化选项去掉看看

ywhbn 发表于 2014-8-12 16:40:23

定义在函数前面、程序开头的语义是一样的。可能是其它问题

煮酒fu 发表于 2014-8-12 18:46:44

ywhbn 发表于 2014-8-12 16:40
定义在函数前面、程序开头的语义是一样的。可能是其它问题

恩,我再看下代码。

rockyyangyang 发表于 2014-8-12 19:06:06

printf换成sprintf,请叫我活雷锋

tohell 发表于 2014-8-12 20:20:01

煮酒fu 发表于 2014-8-12 15:50
void sdgbfrb(int value)
{
       nrtngtfrngfhn;


你的意思是修改前后dis都是全局变量?

煮酒fu 发表于 2014-8-13 10:26:49

tohell 发表于 2014-8-12 20:20
你的意思是修改前后dis都是全局变量?

原因找到了,迥,ldo供电输出能力不够,导致单片机输出不稳定。。。。

qinxg 发表于 2014-8-13 10:44:13

      sprintf(dis, "%d",value);   //dis一定要足够大,否则会充爆

dellric 发表于 2014-8-13 11:00:10

今天没有喝脉动,状态不佳,打开网页就看到,“变量定义出错,导弹程序跑飞”,吓了一跳。

dellric 发表于 2014-8-13 11:03:38

dis没有被初始化,放到最开头的时候,c程序在初始化全局变量的时候,已经帮你设置为0结尾的ASCII字符串,这个串是个空串,因为第一个字符就是0,如果没有初始化,程序会一直找0,直到碰到不该碰到的东西,就死机或重启了。

煮酒fu 发表于 2014-8-13 16:54:24

dellric 发表于 2014-8-13 11:00
今天没有喝脉动,状态不佳,打开网页就看到,“变量定义出错,导弹程序跑飞”,吓了一跳。 ...

你看准了吗,大哥。我写导弹了吗。

gshuang1 发表于 2014-8-13 22:06:22

定义局部变量就跑飞,全局就没问题,可以试试定义局部变量,在前面加个static,如果不会跑飞,可以确定是栈不够。你的printf函数或SendData占用太多资源,另外,自己定义的函数不要和公共函数名一致,如printf,不检点行为迟早会出事的。
页: [1]
查看完整版本: 变量定义出错,导致程序跑飞。请教下原因。