C/C++在内存分配和释放时,小心野指针

c/c++

浏览数:304

2019-4-1

普通的野指针

在C/C++中进行内存分配之后,如果在使用过之后释放了内存,一定要注意将指针置为NULL,否则指针将变成野指针。

示例代码如下

char *p = (char *)malloc(sizeof(char));
//exe task

free(p);//若不释放指针p所指内存空间,则会造成内存泄漏。

p = NULL;//若不置指针p为NULL,则可能会被误以为是合法的,就会成为野指针。
         //如果后续无意中引用了p就可能会造成错误

...... // do something else

因为在通过 free(p)释放了内存之后,只是将内存进行了释放,不能再使用这块内存,但是这时候p还是会指向这块内存(所以还有通过指针访问这块内存的可能性),所以为了安全,为了不出现后续无意中引用了p就可能会造成错误的情况,就需要在释放了内存之后,显式的将指针置为NULL

这些编程中的细节的规范是极其重要的,编程其实是一个庞大的而且其中有着极其多的复杂的细节的工作,一个好的开发者一定要能够在编码的细节、代码的规范上面做得好才行

另一种形式的野指针

还可能存在这样的情况:有多个指针指向同一块地址,通过一个指针释放该内存空间后,这个指针也确实被置为null了,但是还存在另外的指向该内存的指针来访问该空间的情况。

这也是另一种需要谨慎对待的野指针,所以也是需要考虑和防止的!