【问题标题】:Using malloc to store coordinates in C使用 malloc 在 C 中存储坐标
【发布时间】:2021-06-20 02:35:19
【问题描述】:

我正在编写一个程序,而我目前正在处理的部分必须采用数百个三角形(形成 3D 形状)并存储每个三角形的坐标。例如,一个三角形的坐标为:(x1, y1, z1) (x2, y2, z2) (x3, y3, z3)。 我认为也许以这种方式组织结构将是一个开始(但我对更好的想法持开放态度......!)

struct triangle {
  double x1;
  double y1;
  double z1;
  double x2;
  double y2;
  double z2;
  double x3;
  double y3;
  double z3;
};

本质上,我希望能够存储每个三角形的坐标,然后在程序的另一点我想返回并删除一些三角形并将其他一些三角形添加到“列表”中。 几天来我一直在尝试这样做,任何帮助都将不胜感激 - 这让我发疯......

提前致谢!如果我能更详细地解释任何事情,请告诉我。

【问题讨论】:

  • struct coord { double x, y, z; }; struct triangle { struct coord coords[3]; };?
  • 这很有帮助——我不太清楚在这种情况下如何实现 malloc。谢谢你:)
  • 你应该展示“尝试这样做几天”的(不成功的)结果,并解释你到底遇到了什么问题。如果您使用数组(而不是列表)之类的东西并想要删除数据,则必须处理未使用的数组元素或将所有数据移到已删除元素之后以关闭“洞”。
  • 问题是我在过去几个月中学习了 C 并且已经能够编写代码来构建三角形的 STL 文件,但我需要一种更可靠的存储三角形的方法然后将更容易通过添加/删除来编辑列表。我还没有弄清楚 malloc ,特别是如果它涉及一个结构。我试图自己解决问题,但我束手无策,真的需要对我的申请进行解释。非常感谢您的帮助!
  • 根据您必须添加/删除的三角形“对象”的频率和数量,以快速有效的方式管理此类处理并非易事。为了不深入,我建议您开始定义基础对象、三角形集,然后使用链表将它们连接起来。链接列表允许从链中轻松添加/删除对象,但不是最快或更有效的方式。无论如何,它可能是调查更有效方法的基础(也许在谷歌的帮助下......)。

标签: c struct malloc realloc


【解决方案1】:

首先,您可能希望使用更用户友好的结构:

struct coord_s {
    double x;
    double y;
    double z;
}

struct triangle_s {
    struct coord_s points[3];
}

然后,就 malloc 而言,您可以将 指针 分配给使用 malloc 的结构,例如 struct triangle_s *my_triangle = malloc(sizeof(struct triangle_s));

sizeof() 将负责计算实际结构的大小并将其发送到 malloc()

然后你只需要根据你的用例选择使用什么作为存储

【讨论】:

  • 当我尝试这个时,我得到一个错误说'初始化元素不是恒定的':(我以为我是一个称职的 C 编码器,但是当涉及到 malloc 时,无论我多么努力,我都是无用的试试..!
  • 你确定你复制的结构和我一样吗?您可能使用了 '[]' 而不是 [3]
  • 次要 nitpick:malloc(sizeof(struct triangle_s)) 不分配指针。它为单个struct triangle_s 分配内存,并返回一个指向它的指针。
  • my_triangle = malloc(sizeof(struct triangle_s)); 的良好替代品 --> my_triangle = malloc(sizeof *my_triangle); 易于编码、审查和维护。为什么要冒编码错误类型的风险?
猜你喜欢
  • 2021-12-31
  • 1970-01-01
  • 1970-01-01
  • 2019-04-27
  • 2022-01-19
  • 2013-03-29
  • 2019-06-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多