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之外