当前位置:  技术问答>linux和unix

注释掉未使用变量,导致程序运行崩溃问题.

    来源: 互联网  发布时间:2016-08-31

    本文导语:  环境:arm-linux  内核:2.4.1 注释掉变量位置: int main() { struct termios setbuf; unsigned char *pshar; // char xxxxx;             //就是注释掉改变量,导致程序运行崩溃 ...... 以下代码省略 ...... } 关键:char xxxxx; 我发现注...

环境:arm-linux 
内核:2.4.1

注释掉变量位置:
int main()
{
struct termios setbuf;
unsigned char *pshar;
// char xxxxx;             //就是注释掉改变量,导致程序运行崩溃
......
以下代码省略
......
}

关键:char xxxxx; 我发现注释掉该段程序运行就会崩溃,但我随意改变该变量的类型和命名,程序运行正常.

但就是不能注释掉,头痛的问题.

有人遇到过这样的问题吗.应该怎么去查找分析原因..

求解.谢谢!!!!!!!!!

|
这个问题很常见的。

一般是有数组越界或者指针越界。原来因为有个冗余变量,越界的时候只是影响了该变量;现在该变量没了,下面的区域就倒霉了。

|
上面这个信息看起来似乎是在sendmessage的时候崩溃了,只能看出这个问题来。

另外,cmdindex看起来是负的,好像不大对,datalength也不大对了。

你把源码贴出来,请大家帮你检查一下越界。

|
像是未定义操作蹦出来的错误~~~比如下面程序fclose两次。

你把里面

#include        
#include        

int
main()
{
       int pid;
       FILE *fp = fopen("1.txt","w");
       pid = fork();

       if(pid == 0){
               printf("pid=%d:the father will close the file %x...n",pid,*fp);
               fclose(fp);
       }
       sleep(1);
       printf("pid=%d:the child will close the file %xn",pid,*fp);
       if(fp!=NULL){
               if(fileno(fp)>0){ //把这个判断注释掉可以看到未定义操作效果
                       fclose(fp);
               }
       }
}
/*-----------------------------------------------------------------------
未定义行为顾名思义就是标准没有对其作出具体规定的行为。比如“fclose 两次”其行为就是一个未定义行为。

对于未定义行为,标准允许编译器可以任意定义一个具体实现,因此这样的行为其结果不是确定的。比如对于上述未定义行为,其具体实现可以是:fclose函数返回错误码、出现段错误程序终止、或者任何其它可能的实现。

由于未定义行为会使程序出现不确定的运行结果从而达不到程序的预定目的,所以这不是我们所希望出现的。因此,一定不要让未定义行为出现在程序中,这是程序员的一个基本职责。比如,“fclose 两次”这个行为会导致未定义行为,那么在程序中就绝对要避免出现“fclose 两次”这样的错误。

对于程序员来说,导致未定义行为产生的行为(如“fclose 两次”)其实就是标准的禁止事项。如果未定义行为在程序中出现了,说明这个程序违反了标准的规定,是非法程序。
 ------------------------------------------------------------------------*/

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间javax.xml.ws注释类型webserviceref成员方法: type定义参考
  • 我没用过Java,请问各位大侠Java中除了/*...*/用作注释外,还有什么符号可用于注释符?
  • java命名空间javax.xml.ws注释类型webserviceref成员方法: name定义参考
  • 请教:如何将某一特定的注释行开头的#删除,使其成为非注释行?
  • java命名空间javax.annotation注释类型resource的类成员方法: type定义及介绍
  • Python实现多行注释的另类方法
  • java命名空间javax.annotation注释类型resource的类成员方法: name定义及介绍
  • VIM 注释插件使用
  • java命名空间javax.management注释类型mxbean的类成员方法: value定义及介绍
  • vi换行自动注释
  • java命名空间java.lang注释类型suppresswarnings的类成员方法: value定义及介绍
  • gdbtui 中文注释乱码?设置了charset为UTF-8还是乱码,怎么办?
  • java命名空间javax.jws注释类型webservice的类成员方法: endpointinterface定义及介绍
  • Lesson01_03 注释与特殊字符
  • java命名空间javax.annotation注释类型generated的类成员方法: comments定义及介绍
  • 此行既己用#标为注释,又如何被chkconfig识别?!
  • java命名空间javax.xml.ws注释类型webserviceref成员方法: wsdllocation定义参考
  • PROC开发时 //注释编译不通过 如何设置使用cpp编译。
  • java命名空间javax.jws注释类型webservice的类成员方法: targetnamespace定义及介绍
  • VIM解析注释问题
  • java命名空间java.beans注释类型constructorproperties的类成员方法: value定义及介绍
  • 在linux查看配制文件如何过滤掉#注释


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3