有关"烫烫烫"和指针问题
在C++编程过程中,如果我们不够小心,在输出的时候偶尔会没有出现正确的输出,而是输出一些乱码,例如,"烫烫烫……"。
一般出现诸如此类乱码的是因为:1,输出了没有被初始化的值;2,字符串的输出没有遇到结束符'\0'。
当然,这肯定是根本原因。但是,在代码比较多的程序中,有时候很难去查找到底哪里出了错误,更可怕的是有时候认为自己没有
错误,但偏偏就是这一点出了错。下面举一个例子:
#include <iostream>
using namespace std;
char *p = NULL;
void fun2(char *name)
{
p = name;
}
void fun1()
{
char name[20];
cin >> name;
fun2(name);
}
int main()
{
fun1();
cout << p;
return 0;
}
using namespace std;
char *p = 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数组的首地址,但是由于这部分空间已经被释放,所以此时不知道
这部分空间里装的是什么内容;
综上,也就得出了为什么在这里会出现乱码。
这样的一个错误,我感觉还是非常隐蔽的,特别是在代码比较多的情况下就更加难以察觉了。

浙公网安备 33010602011771号