微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

分配给灵活的数组成员在 C 中没有按预期工作

如何解决分配给灵活的数组成员在 C 中没有按预期工作

我正在做一个练习,我必须创建两个结构,一个用于存储点数据,另一个用于存储多边形。然后我必须创建一个函数来创建一个给定中心、半径和顶点数量的正多边形。到目前为止,我还没有考虑半径和中心。数学运算很好,但是由于某种原因,当我尝试将点存储在多边形数组中时,似乎存在一些问题。主函数的最后一行打印 -nan 或非常大的数字(取决于数组的索引)。我猜问题出在 malloc 函数或赋值 regular_polygon->vertex_list[i] = temp; 中,但我不知道我做错了什么。

代码如下:

#include <stdio.h>
#include <math.h>
#include <stdlib.h>

#define PI 3.14159265

struct point {
    float x;
    float y;
};

struct polygon {
    int num_vertex;
    struct point vertex_list[];
};

struct polygon regular_polygon(struct point center,int num_vertex,float radius){

    struct polygon *regular_polygon = malloc(sizeof(*regular_polygon) + num_vertex * sizeof(regular_polygon->vertex_list[0]));
    regular_polygon->num_vertex = num_vertex;
    
    float step = 2. * PI / (float) num_vertex;

    for (int i = 0; i < num_vertex; i++)
        {
            float x = cos(i * step);
            float y = sin(i * step);
            struct point temp = {x,y};
            printf("(%f,%f)\n",temp.x,temp.y);
            // Here
            regular_polygon->vertex_list[i] = temp;
        }

    return *regular_polygon;
}

int main() {    
    struct point c1 = {3,5};
    struct polygon p1 = regular_polygon(c1,6,1);

    printf("%f \n",p1.vertex_list[1].x );
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。