常见的内存错误

引用 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;

}

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值