有关"烫烫烫"和指针问题

在C++编程过程中,如果我们不够小心,在输出的时候偶尔会没有出现正确的输出,而是输出一些乱码,例如,"烫烫烫……"。

一般出现诸如此类乱码的是因为:1,输出了没有被初始化的值;2,字符串的输出没有遇到结束符'\0'。

当然,这肯定是根本原因。但是,在代码比较多的程序中,有时候很难去查找到底哪里出了错误,更可怕的是有时候认为自己没有

错误,但偏偏就是这一点出了错。下面举一个例子:

#include <iostream>
using namespace std;

char *= NULL;

void fun2(char *name)
{
    p 
= name;
}

void fun1()
{
    
char name[20];
    cin 
>> name;
    fun2(name);
}

int main()
{
    fun1();
    cout 
<< p;
    
return 0;
}

在这段代码中,定义了一个全局的指针变量p;在fun1()中输入name,通过fun2()传值给p;最后在主函数中输出p。

整个过程看似很正确,但是运行的结果却是乱码。这是为什么呢?

我们再来仔细的分析一下:

char name[20]是定义在函数fun1()内部的字符数组,假设我们输入的是"xiaoming";

然后,调用fun2(),其作用是把指针p指向name数组的首地址;

然后,进入主函数,发现在fun1()调用结束后,系统就自动释放了name数组的空间;

当要求输出*p的时候,虽然p仍然是指向先前name数组的首地址,但是由于这部分空间已经被释放,所以此时不知道

这部分空间里装的是什么内容;

综上,也就得出了为什么在这里会出现乱码。

这样的一个错误,我感觉还是非常隐蔽的,特别是在代码比较多的情况下就更加难以察觉了。

 

 

 

 

 

 

 

posted @ 2009-06-07 17:29  DeMo  阅读(309)  评论(0)    收藏  举报