2017-04-22 22 views
0

構造体の配列を構造体の配列に設定しようとしています。これに私は関数を作成しました。どのように私はそれをやってみると、私はそれを行うことができません。構造体配列をパラメータとして関数に渡す

struct polygon { 
struct point polygonVertexes[100]; 
}; 
struct polygon polygons[800]; 
int polygonCounter = 0; 


int setPolygonQuardinates(struct point polygonVertexes[]) { 
    memcpy(polygons[polygonCounter].polygonVertexes, polygonVertexes,4); 
} 

int main(){ 

    struct point polygonPoints[100] = {points[point1], points[point2], points[point3], points[point4]}; 

    setPolygonQuardinates(polygonPoints); 
    drawpolygon(); 
} 



void drawpolygon() { 
    for (int i = 0; polygons[i].polygonVertexes != NULL; i++) { 
     glBegin(GL_POLYGON); 
     for (int j= 0; polygons[i].polygonVertexes[j].x != NULL; j++) { 
      struct point pointToDraw = {polygons[i].polygonVertexes[j].x, polygons[i].polygonVertexes[j].y}; 
      glVertex2i(pointToDraw.x, pointToDraw.y); 
     } 
     glEnd(); 
    } 
} 

私はこれを実行したときに、私は次のエラー

Segmentation fault; core dumped; real time 
+0

「私はそれを意味することができませんか? – OldProgrammer

+0

このコードの特定のエラーはありますか? – Gaurav

+0

悪い英語を申し訳ありません。私は、多角形構造体のpolygonVertexesメンバにpolygonPoints配列をコピーすることができないということを意味しました。 setPolygonQuardinates関数の実行後、polygonVertexesメンバーには迷惑メールの値があります。 –

答えて

0

はあなたがここにstrcpyを使用することはできません取得します。つまり、NULLで終了する文字列の場合です。 A structはヌルで終了する文字列ではありません:)オブジェクトをコピーするには、memcpyを使用してください。

Cで配列を渡すには、配列内のオブジェクトの数を示す2番目のパラメータが通常渡されます。あるいは、配列と長さを構造体に入れ、その構造体を渡します。

EDIT:これを行う方法の例:

void setPolygonQuardinates(struct point* polygonVertexes, size_t polygonVertexesSize) { 
    memcpy(polygons[polygonCounter].polygonVertexes, polygonVertexes, sizeof(point) * polygonVertexesSize); 
} 

int main(){ 
    struct point polygonPoints[100] = {points[point1], points[point2], points[point3], points[point4]}; 
         /*  ^---------v make sure they match */ 
    setPolygonQuardinates(polygonPoints, 100); 
    drawpolygon(); 
} 

あなたは、これは説明が必要な場合は、お問い合わせください。私はそれが熟語Cコードだと思う。

+0

私はこれを試しましたが、まだ同じエラーが発生しています。構造体メンバ配列にポイント配列を格納するために他に何を行うことができます –

+0

私は例を使って私の答えを編集しました。 – InternetAussie

+0

助けてくれてありがとう、私の問題を解決しました。私はまだコードを学んでいて、コードを良くする方法を知りたいです。 –

関連する問題