出現了這種情況,多半是由於下面幾個原因引起的。
【摘自網絡】
1.free了未分配的內存。
2.申請的內存未free。(個人覺得這個不太可能造成錯誤,只是會內存洩露)
3.在申請的內存中進行了內存的越界操作。多見於數組、結構體循環處理的時候。
下面用例子來驗證一下第三種情況。
#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#define MAX_NUM 10
int main(int argc,char **argv)
{
char *str;
str = (char*)malloc(sizeof(char)*MAX_NUM);
if(!str)
exit(-1);
for(i=0;i<MAX_NUM+2;i++){
str[i] = 'a';
}
free(str);
return 0;
}
備註:如果對一塊內存進行了兩次free,會不會出現上面的問題?
有興趣的話,自己驗證一下吧!