引用 http://blog.youkuaiyun.com/absurd
作者联系方式:李先静 <xianjimli at hotmail dot com> 感谢作者,另外部分来自我自己的加工体会
1. 内存泄露
比如malloc 分配后,要学会释放该内存,如果忘了释放不在使用的内存,这些内存不能被重用,造成内存泄露
2.内存越界访问
一,读越界,那就是读了不属于自己的数据,另外读的内存是无效的,程序会崩溃的,如果读的内存是有效的,读的时候内存是随机的,产生不可以预料的结果,要对外部传入参数要仔细检查
3.野指针
野指针就是已经释放掉的指针,当调用free 的时候,p 指向的内存被释放了,p 本身没有变化的,但是它指向的内存仍然有效果的,
释放掉的内存被内存管理重新分配,野指针被指向的内存被重新分配,释放内存的时候,把对应的指针置为空。
4、访问空指针
空指针通常来判断一个指针的有效性,通常操作系统会保留从0 开始的内存,一旦出发这块内存则产生异常,
5.引用未初始化的变量,
6.返回指向临时变量的指针
栈里面的变量是临时的,当前函数执行完后,临时变量和参数被清除了,不能把这些临时变量返给调用者,这样的指针指向的数据是随机的,会给程序造成不可预料的后果。
char* get_str(void)
{
char str[] = {"abcd"};//错误的,连接的时候产生用完释放
char*str ="abcd";// 全局的编译的时候产生
return str;
}
int main(int argc, char* argv[])
{
char* p = get_str();
printf("%s/n", p);
return 0;
}