【发布时间】:2010-02-19 07:15:46
【问题描述】:
我最近调试了一个奇怪的 C++ 问题,其中一个新声明的向量不知何故具有 477218589 的大小。这是上下文:
struct Triangle {
Point3 a,b,c;
Triangle(Point3 x, Point3 y, Point3 z) : a(x), b(y), c(z) {}
Vector3 flat_normal() { return (a-c)^(b-c); }
};
vector<Triangle> triangles;
调用triangles.size() 返回值477218589。
我通过将struct Triangle 更改为class Triangle 来“解决”问题,但我想知道为什么会有任何不同。我应该这样做typedef struct Foo { ... } Foo;魔术吗?如果是这样,为什么会有帮助?
如果重要的话,我使用的是 g++-4.1。
【问题讨论】:
-
您所描述的可以安全地称为“不太可能”,原因不止一个。显然,您没有发布整个代码。不,将
struct更改为class不会解决问题,如果有的话,除了会导致重新编译翻译单元。 -
如果你想在调试过程中可靠地观察变量,你必须关闭优化。如果是程序本身输出了错误的值,请发布一个显示该行为的最小可编译 sn-p。
-
好吧,我无法在其他地方重现该错误,所以显然它不存在! :-P 无论如何,谢谢。