2017-03-08 41 views
-4

淨無效的指針是包含realloc()的:用C

typedef struct net{ 
    int numele; 
    struct net **e; 
} net; 

下面的代碼引發錯誤的結構:

realloc(): invalid pointer

的realloc的導致的問題時,它被訪問,並給出了以上錯誤。我不明白爲什麼。如果你認爲這部分代碼沒有問題,讓我知道,因爲整個代碼是800行,所以我不認爲我可以在這裏發佈它。

void add(net *n, net *ne) { 
    if(n->numele==0) { 
     n->e = (net **)malloc(sizeof(net *)); 
     n->e[0] = ne; 
     n->numele = 1; 
    } else { 
     n->e = (net **)realloc(n->e, (1 + n->numele)*sizeof(net *)); 
     n->e[n->numele] = ne; 
     n->numele = n->numele + 1; 
    } 
} 

籃網nne已經被初始化其他地方的代碼,所以你可以假設他們不會爲空。

+2

[請參閱此討論,爲什麼不在'C'中投射'malloc()'和家族的返回值。](http://stackoverflow.com/q/605845/2173917)。 –

+2

您介意創建一個[___MCVE___](http://stackoverflow.com/help/mcve)? –

+2

@SouravGhosh - 如果你輸入標記'[mcve]',我學會了一個整潔的功能,擴展到[mcve]。 – StoryTeller

回答

0

代碼爲realloc()似乎沒問題。但是,如果net *n在首次調用add()numele != 0 && e != NULL時未正確初始化。在這種情況下,e可能有一些垃圾值,realloc()嘗試使用無效地址。這樣可能會發生錯誤。