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;    
    }
4

1 に答える 1

3

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() xvalsyvals不要になったとき。

于 2012-05-15T09:25:05.887 に答える