1、初始化错误。
例如:malloc()返回的空间没有进行初始化
2、未检查返回值
3、对空指针或者无效指针解引用
4、引用已经释放的内存(未定义)
例如
for(p=head;p!=NULL;p=p->next)
free(p);
可以写成
for(p=head;p!=NULL:p=q)
{
q=p->next;
free(p);
}
5、对同一块内存释放多次:它会以一种不会立即显现的方式破坏内存管理器中的数据结构。
例如:在错误处理中进行了释放后,作用区域结束时再次进行了释放
6、内存泄漏
7、零长度分配
malloc(0)返回的指针不是NULL;但是除了free,别的地方不要使用这个指针。
realloc(p,0)返回的可能是NULL;也可能是非NULL,但是同样的除了在free中,别的地方不要使用这个指针