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)