Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/56.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 通过引用向函数传递结构后访问结构指针_C_Pointers_Struct_Pass By Reference - Fatal编程技术网

C 通过引用向函数传递结构后访问结构指针

C 通过引用向函数传递结构后访问结构指针,c,pointers,struct,pass-by-reference,C,Pointers,Struct,Pass By Reference,我有这段代码,但是我不确定在通过 引用到函数中,程序在这一行崩溃, 访问指针不起作用 scanf("(%lf,%lf)",polygon->xvals[i],polygon->yvals[i]); 修正代码,感谢所有回答的人 struct Polygon{ double *xvals, *yvals; int numverts; }; typedef struct Polygon pol; pol getpoly(pol *p

我有这段代码,但是我不确定在通过 引用到函数中,程序在这一行崩溃, 访问指针不起作用

    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;    
    }
struct多边形{
双*xVAL,*yVAL;
int numverts;
};
typedef结构多边形pol;
pol getpoly(pol*多边形);
int main(){
多边形;
getpoly(多边形和多边形);
}
pol getpoly(pol*多边形){
多边形->xvals=(双*)malloc(大小(双)*多边形->numverts);
多边形->yvals=(双*)malloc(大小(双)*多边形->numverts);
检查=0;
int i;
对于(i=0;inumverts-1]=多边形->yvals[0];
返回*多边形;
}

没有为
xvals
yvals
分配内存,它们是未初始化的指针。
numverts
也未初始化。您需要
malloc()
xvals
yvals
分配空间并初始化
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()
xvals
yvals

没有为
xvals
yvals
分配内存,它们是未初始化的指针。
numverts
也未初始化。您需要
malloc()
用于
xVAL
yVAL
的空间,并初始化
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()
xvals
yvals
当不再需要时。

抱歉,我没有解释到底出了什么问题,程序在我尝试将内容放入点时失败。我编辑了标记。C中没有引用。@n.m。代码中也没有引用;我觉得它像是有效的C(当然除了
main
中缺少的
return
)@Mike:除了不能道歉,我没有解释到底出了什么问题,程序在我试图把东西放进指针的地方失败了。我编辑了标记。C中没有引用。@n.m.代码中也没有引用;我觉得它像是有效的C(当然除了
main
中缺少的
return
。@Mike:除了
cout之外