2012-05-15 170 views
0

我有这段代码,但是我不确定如何在通过引用将 结构传递给函数后访问结构指针,程序在此行崩溃, 访问指针不工作。通过引用函数传递结构后访问结构指针

scanf("(%lf,%lf)",polygon->xvals[i],polygon->yvals[i]); 

固定码,感谢所有谁回答

struct Polygon{ 
    double *xvals, *yvals; 
    int numverts; 
    }; 
    typedef struct Polygon pol; 
    pol getpoly(pol *polygon); 


    int main(){ 
    pol polygon; 
    getpoly(&polygon); 
      } 


    pol getpoly(pol *polygon){ 
     polygon->xvals = (double *)malloc(sizeof(double)*polygon->numverts); 
     polygon->yvals = (double *)malloc(sizeof(double)*polygon->numverts); 

     check=0; 
     int i; 

     for(i=0;i<10;i++){ 

     while(check !=2){ 
     cout<<"enter vertices "<<i<<" (x,y)\n"; 
     check = scanf("(%lf,%lf)",&polygon->xvals[i],&polygon->yvals[i]); 
     _flushall(); 
     } 
     check=0; 
     } 
     polygon->xvals[polygon->numverts-1] = polygon->xvals[0]; 
     polygon->yvals[polygon->numverts-1] = polygon->yvals[0]; 

    return *polygon;  
    } 
+0

道歉,我没有解释实际发生了什么问题,程序失败,我试图将东西放入指针 –

+0

我已经编辑了标签。 C. –

+0

@ n.m中没有提及。代码中也没有引用;它对我来说看起来像是有效的C(除了当然在'main'中缺少'return')。 –

回答

3

无记忆已经被分配给xvalsyvals,他们是uninitialsed指针。 numverts也是无意义的。您需要malloc()空间xvalsyvals并初始化numverts

polygon->numverts = 10; 
polygon->xvals = malloc(polygon->numverts * sizeof(double)); 
polygon->yvals = malloc(polygon->numverts * sizeof(double)); 

,防止超越这些阵列的结束,因为这个代码:

polygon->xvals[polygon->numverts] = polygon->xvals[0]; 
polygon->yvals[polygon->numverts] = polygon->yvals[0]; 

应该是:

polygon->xvals[polygon->numverts - 1] = polygon->xvals[0]; 
polygon->yvals[polygon->numverts - 1] = polygon->yvals[0]; 

请记住free()xvalsyvals当不再需要。