2014-12-22 238 views
-1

我想使結構的矩陣,但下面的代碼給我賽格故障,我無法找出它的wrong.It給賽格故障free_zone功能之後:矩陣的元素structers

struct zone{ 
    char tc[20],or[20]; 
    char dir; 
    int nrc; 
}; 
void init(struct zone ***a,int n,int m){ 
    int i; 
    a=(struct zone **)malloc(n*sizeof(struct zone *)); 
    for(i=0;i<n;i++){ 
     (*a)[i]=(struct zone *)malloc(m*sizeof(struct zone)); 
    } 
    return a; 
} 
void free_zone(struct zone ***a,int n,int m){ 
    int i; 
    for(i=0;i<n;i++){ 
     free(*(a)[i]); 
    } 
    free(a); 
} 
int main() 
{ 
    struct zone **a; 
    int n,m; 
    scanf("%d%d",&n,&m); 
    init(a,n,m); 
    free_zone(a,n,m); 
    return 0; 
} 
+2

您可以在啓用所有警告的情況下編譯並首先修復所有這些警告嗎? – Rufflewind

+0

^重複覆蓋'init()'函數並調用它;修復'free_zone'函數通過'struct zone ** a'。當存在不同的間接級別時,通過使用不同的變量名可以使您的代碼更易於理解。調用參數init'pa'。 –

回答

0
int main() 
{ 
    struct zone **a; 
    int n,m; 
    scanf("%d%d",&n,&m); 
    init(a,n,m); 
    free(a,n,m); // Looks suspicious 
    return 0; 
} 

main()呼叫free()與由free_zone()

free()所需要的參數是一個C庫函數來釋放動態存儲器。

+0

是的,對不起,我寫得很糟糕。 –