我在iPhone應用程序中使用了一個c lib。 c lib是由我無法訪問的人編寫的。iphone ansi c:被釋放的指針未被分配
但是我得到的錯誤,對象0xa6000d被釋放,但沒有分配。調試變量截圖在這裏。
結構GtsMsg被定義爲,
struct msg {
int offset;
int dataLength;
u8* data;
cBool expandable;
cBool owned;
u8* mid2key;
};
#define GtsMsg struct msg
void freeMessageData(GtsMsg* msg) {
if (msg == NULL) return;
if (msg->owned) {
if (msg->data != NULL) {
free(msg->data);
}
}
free(msg->mid2key);
memset(msg, 0, sizeof(GtsMsg));
}
爲malloc_error_break斷點是線自由(MSG->數據)。
我已經添加了檢查是否(msg-> data!= NULL),但它沒有工作。有什麼方法來檢查msg-> data或msg的內存是否被分配?
你以爲* data =(u8)'\ 0'有什麼可疑的嗎?
在此先感謝!
當您分配結構時,您是否將其指針成員的有效值(指向已分配內存的指針或NULL)? – simonc 2013-02-15 11:37:42
這也是我的想法。該結構用於某些目標c和cpp類。未明確初始化。但它適用於所有情況。我只是在一個特殊的情況下,當應用程序崩潰。 – karim 2013-02-15 11:40:13
這將是你的問題。指針成員必須被初始化。你可以通過使用calloc來填充內存零位,(2)手動設置指針指向已分配的內存,(3)通過手動將指針設置爲NULL來完成此操作(1)。任何沒有這些功能的代碼只是偶然的工作,並且很容易在將來中斷 – simonc 2013-02-15 11:42:39