当前位置: 技术问答>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; 我发现注释掉该段程序运行就会崩溃,但我随意改变该变量的类型和命名,程序运行正常.
但就是不能注释掉,头痛的问题.
有人遇到过这样的问题吗.应该怎么去查找分析原因..
求解.谢谢!!!!!!!!!
内核:2.4.1
注释掉变量位置:
int main()
{
struct termios setbuf;
unsigned char *pshar;
// char xxxxx; //就是注释掉改变量,导致程序运行崩溃
......
以下代码省略
......
}
关键:char xxxxx; 我发现注释掉该段程序运行就会崩溃,但我随意改变该变量的类型和命名,程序运行正常.
但就是不能注释掉,头痛的问题.
有人遇到过这样的问题吗.应该怎么去查找分析原因..
求解.谢谢!!!!!!!!!
|
这个问题很常见的。
一般是有数组越界或者指针越界。原来因为有个冗余变量,越界的时候只是影响了该变量;现在该变量没了,下面的区域就倒霉了。
一般是有数组越界或者指针越界。原来因为有个冗余变量,越界的时候只是影响了该变量;现在该变量没了,下面的区域就倒霉了。
|
上面这个信息看起来似乎是在sendmessage的时候崩溃了,只能看出这个问题来。
另外,cmdindex看起来是负的,好像不大对,datalength也不大对了。
你把源码贴出来,请大家帮你检查一下越界。
另外,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 两次”)其实就是标准的禁止事项。如果未定义行为在程序中出现了,说明这个程序违反了标准的规定,是非法程序。
------------------------------------------------------------------------*/