万恶的指针
2012-06-10 19:30
134 查看
struct people { char *name; int age; }peo, *p; void main() { strcpy(peo.name, "people"); //语句 1 p = (people *)malloc(sizeof(people)); strcpy(p->name, "people"); //语句 2 free(p); }
上面的代码能编译通过,但是不能正常运行。发生了什么事?
原因是 指针初始化
如果不初始化会怎样?在这里我们也分析过,如果指针不初始化的话。那么我们是无法估计被定义的指针变量里面存放的东西是什么。既然不知道的话,那计算机肯定不会让你进行操作了。解决办法就是给 peo.name 申请一块内存空间。在语句 1 前加上 peo.name = (char
*)malloc(10);
好了,再编译,通过,但是再次不能正常运行。这又是为什么呢?
现在看语句 2 。经过上面的解释,相信这里的错误原因大家也知道了。所以,我们在语句 2 前加上 p —> name = (char *)malloc(10);就行了。
这里为什么是申请大小为10个字节的空间?如果换了(char *)malloc( sizeof(char*) )呢?这两个问题会在这篇进行分析。
通过上述例子,我们要注意的不是 结构体中存在成员指针未初始化 这种情况。我们更应该形成一个条件反射,凡是遇到指针,即须想此指针是否已被初始化。防止成为野指针。
相关文章推荐
- dll应用,传说中的万恶的智能指针
- "万恶的"指针
- 字符串与指针学习3lefttrim()
- C++指针与引用的区别
- 对C语言数据处理和指针的理解(二)
- 再再论指针之C语言声明详解
- C++指针的学习理解
- POJ3320 Jessica's Reading Problem(双指针)
- c/c++ 函数指针和指针函数,变量指针和指针变量
- [xxx respondsToSelector:]message sent to deallocated instance和空地址崩溃 空指针
- 数组指针与指针数组的知识点总结
- AC自动机板子(指针,数组)
- C++文本查询程序 定义类管理数据 用智能指针 用StrBlob代替vector<string> C++Primer 练习12.32
- delphi dll及函数指针的使用
- 指针与struct
- 地址和指针的概念
- C++之函数指针
- mfc 小技巧之 获取对话框句柄 对话框指针
- c和指针 02
- 二维指针,二维数组,以及指向数组的指针的相关问题