mini-xml 讀取XML後釋放空間錯誤的問題!

mxmlDelete(tree); 最後釋放tree的時候報錯;

*** glibc detected *** ./vwl_service_command: free(): invalid pointer: 0x000a2700 ***
Aborted ; 沒搞明白這是爲什麼?


報錯說明: 釋放非法的指針0X000a2700

分析:    顯而易見的導致這種錯誤的原因是  指針異常;

那麼有哪些原因會導致發生這種錯誤呢?

無外乎有以下的幾種情況:

1: 重複free 也就是說一個指針被重複free了;

p = malloc(len );

free(p);

free(p);    一次malloc多次free;  第二次free的就已經是空指針或野指針;

2:指針未曾分配空間,就free;free的是一個空指針;

char  *p;

free(p);       釋放的是一個空指針;

3:還有,你仔細看了代碼發現的確沒有上面的兩種情況,,但是還是發生這種錯誤;那就要好好檢查下,指針是不是被改動了;或者被覆蓋了;

可以打印  初始的指針和你最後釋放的指針內容,確定他是否被改動;    本人出錯的環節就在這裏;


總結:

其實以上的各條  歸根的原因還是free的空指針或者野指針;所以我們在使用指針的時候一定養成良好的習慣

不用指針 就附NULL值 拴住,不要讓他變成野指針;

free是使用上文中設計的SAFE_FREE;



#define SAFE_FREE(p) \
do {\
if (NULL != p)\
{ \
free(p);  \
p = NULL;  \
} \

} while(0)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章