2017-04-22 5 views
0

J'essaie de définir un tableau de structure dans un tableau de structure. Pour cela, j'ai créé une fonction. mais comme je l'essaie, je ne suis pas capable de le faire.passant tableau struct en tant que paramètre à une fonction

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(); 
    } 
} 

quand je lance ce que je reçois l'erreur suivante

Segmentation fault; core dumped; real time 
+0

Qu'est-ce que "Je ne suis pas capable de le faire?" – OldProgrammer

+0

Une erreur spécifique pour ce code? – Gaurav

+0

désolé pour le mauvais anglais. ce que je voulais dire, c'est que je ne suis pas capable de copier le tableau polygonPoints dans le membre polygonVertexes de la structure du polygone. Après l'exécution de la fonction setPolygonQuardinates, le membre polygonVertexes a des valeurs indésirables. –

Répondre

0

Vous ne pouvez pas utiliser strcpy ici; c'est pour les chaînes à terminaison nulle. Un struct n'est pas une chaîne terminée par un caractère nul :) Pour copier des objets, utilisez memcpy.

Pour passer des tableaux autour de C, un second paramètre indiquant le nombre d'objets dans le tableau est généralement également passé. Alternativement, le tableau et la longueur sont placés dans une structure, et cette structure est transmise.

EDIT: Un exemple de la façon de le faire:

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(); 
} 

Si vous avez besoin ce qui explique, s'il vous plaît demander. Je pense que c'est un code C idiomatique.

+0

J'ai essayé mais j'ai toujours la même erreur. Que puis-je faire pour stocker le tableau de points dans le tableau de membres de la structure? –

+0

J'ai édité ma réponse avec un exemple. – InternetAussie

+0

merci beaucoup pour l'aide, Cela a résolu mon problème. J'apprends toujours à coder et aimerais savoir comment coder mieux. –