版权声明:本文为博主原创文章遵循 版权协议,转载请附上原文出处链接和本声明
今天遇到这样一个问题:
malloc申请空间,free释放时出错程序无法正常运行,并且不报错誤!
通过下断点找到错误:
pNode是一个指针只申请四个字节;
调用时则按照Node节点来进行储存,当free是出现错误!
free()释放的是指针指向的内存!注意!释放的是内存不是指针!指针并没有被释放,指针仍然指向原来的存储空间
指针是一个变量,只有程序结束时才被销毁释放了內存空间后,原来指向这块空间的指针还是存在!
只不过现在指针指向的内容的垃圾是未定义的,
因此释放内存后把指针指向NULL,防止指针在后面不小心又被解引用了
如果申请后不释放就是内存泄露;如果无故释放那就是什么也没有做。释放只能一次
如果释放两次及兩次以上会出现错误
(释放空指针例外,释放空指针其实也等于啥也没做所以释放空指针释放多少次都没有问题)。
由此得来的教训就昰c语言程序错误怎么找中访问数组一定要注意越界的问题!!!
1、malloc与free配套使用。(有申请有释放有创建有销毁)
2、指向malloc申请的堆内存的指針,在运用过程中千万不要另外赋值否则同样导致内存泄露
3、malloc后,实际使用时指针长度超过了你申请的范围再去free时肯定出问题。 (我嘚错误原因)
4、改变指针的初始指向地址