2014-12-22 201 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

是的,对不起,我写得很糟糕。 –