我寫Linux內核模塊,並有一些問題: 我模塊落在點在點檢查這些指針值空指針引用錯誤,而指針不是空最近
static struct area_control {
struct list_head head;
unsigned long addr;
unsigned long jiffies;
struct area_part *part;
} *const_areas = NULL, *var_areas = NULL;
static struct area_control *Find_Area(unsigned long addr, struct area_control *first_area)
{
if (first_area)
{
struct area_control *cur_area = first_area;
while (1)
{
if (!cur_area) return NULL;
if (cur_area->addr == addr)
{
cur_area->jiffies = jiffies;
return cur_area;
}
cur_area = list_entry(cur_area->head.next, struct area_control, head);
if (cur_area == first_area) return NULL;
}
}
return NULL;
}
後 cur_area->head.next
模塊下降,因爲cur_area是NULL! - 我從呼叫跟蹤和反彙編中得到這個事實。模塊爲Linux 2.6.34 x86_64的多處理器架構
你在說什麼? –
你作爲list_entry的第二個參數傳遞了什麼? – Dariusz
你的第三個參數也沒有意義,因爲它沒有在我看到的任何地方聲明... – Jason