【发布时间】:2020-08-28 13:35:55
【问题描述】:
我有两个结构:
struct point {
double x;
double y;
const char *description;
};
struct geomap {
struct point points[];
};
假设我将 x 个点添加到新地图中。我如何从 sizeof 开始得到那个数字 x?或者有没有其他方法可以知道我在新地图中添加了多少点?我需要一个循环来删除点并做其他事情,但我无法计算出元素的数量。
我试过了
sizeof(m->points[])/sizeof(m->points[0])
但它说:ERR 预期表达式 如果您想更快地玩一些代码:
static int counter = 0;
struct geomap *geomap_new() {
struct geomap *a_geomap = (struct geomap *)malloc(sizeof(geomap));
if (!a_geomap)
exit(0);
struct point *a_point = (struct point *)malloc(sizeof(point));
if (!a_point)
exit(0);
return a_geomap;
}
int geomap_add_point(struct geomap *m, double x, double y, const char *descr) {
m->points[counter].x = x;
m->points[counter].y = y;
m->points[counter].description = descr;
counter++;
if (!m) {
printf("failed to allocate new point");
return 0;
}
return 1;
}
int main() {
struct geomap *m = geomap_new();
geomap_add_point(m, 10324, 2341213.2, "212222");
geomap_add_point(m, 103212, 221341.2, "21wdd2");
geomap_add_point(m, 103241, 2.2, "2213122");
geomap_add_point(m, 1034123, 23341.2, "1111");
geomap_add_point(m, 1000324213, 23234242341.2, "dediowd");
return 1;
}
【问题讨论】:
-
在这个例子中,结构中总是有 0 个点。尽管结构中有 0 个点,但您的代码写入了第 1、2、3、4 和 5 个点,从而覆盖了一些不属于您的内存。
-
这是什么
struct point *a_point = ...? -
非常感谢大家的回答,他们都非常有用!