我使用的鏈接列表,代碼工作正常,但在代碼中的內存泄漏執行符號表,內存罰球段錯誤
我有以下結構
struct node { char* pcKey; void* pvValue; struct node *next; }; struct _Sym { int totalBindings; struct node *node; };
加我sym_new方法爲sym分配內存
sym Sym_new (void)
{
_Sym *m_SymTable_t = (_Sym*) malloc (sizeof(_Sym));
if(m_SymTable_t == NULL)
{
return NULL;
}
else
{
m_SymTable_t->totalBindings = 0;
m_SymTable_t->node = NULL;
return m_SymTable_t;
}//endif
}
我爲鍵a分配內存nd基於字符串長度的其他函數中的值。
免費的方法是
typedef struct _Sym *Sym;
void Sym_free (Sym m_SymTable_t)
{
assert(m_SymTable_t != NULL);
struct node* temp = m_SymTable_t->node;
struct node *currentBinding = NULL;
while(temp != NULL)
{
currentBinding = temp;
temp = temp -> next;
//Removing comment for the below line throws segfault
//free(currentBinding -> pcKey);
//free(currentBinding -> pvValue);
free(currentBinding);
}
free(m_SymTable_t);
}
什麼是完全免費的符號正確方法?
我已經上傳我的symTable_Link.cpp文件在鏈接
看起來你沒有在分配器函數中初始化pcKey和pvValue爲NULL? – Jarhmander
也有用可能是:http://stackoverflow.com/questions/605845/do-i-cast-the-result-of-malloc - 爲什麼不投出'malloc'的返回。這不是什麼錯誤的代碼...只是一個評論 – Jimbo
你在哪裏分配pcKey和pvValue的內存?另外,*請*不要使用匈牙利符號來編碼變量名稱中的原始類型信息;這不是它的意思。 –