2012-03-13 36 views
0

我試圖將我的char *參數存儲到結構指針的數據成員中。但是當我嘗試這樣做時,我收到了分段錯誤:11。分割錯誤:11當試圖修改struct

void macro_set(char *name, char *body) 
{ 
    verify(body != NULL, "null arg body"); 

    bool nameExists = false; 

    if(macro_list.name == NULL) 
    { 
     macro_list.name = Strdup(name); 
     macro_list.body = Strdup(body); 
    } 
    else 
    { 
     struct macro *current = &macro_list; 

     for(; current != NULL; current = current->next) 
     { 

      if(strcmp(name, current->name) == 0) 
      { 
       current->body = Strdup(body); 
       nameExists = true; 
      } 
     } 

     if(!nameExists) 
     { 
      current->name = Strdup(name);   
     } 
    } 
} 

當我試圖將名稱存儲到當前名稱中時發生錯誤。感謝任何人,可以幫助!

+1

你的strdup不應該大寫! – CodeKingPlusPlus 2012-03-13 03:06:48

+0

Strdup是我程序中的一個宏,因爲我需要一些附加功能。 – user1265521 2012-03-13 03:09:36

+0

'macro_list'已經在我的代碼的另一部分的內存中分配了 – user1265521 2012-03-13 03:12:59

回答

3

如果沒有macro_list元素的匹配name,則for環路將與

nameExists = false
current = NULL退出。

然後隨後if將是真實的,而行

current->name = Strdup(name); 

有效地分配

((struct macro *) NULL)->name = Strdup(name);