【发布时间】:2017-06-15 19:19:16
【问题描述】:
我正在使用第 3 方代码,其类型定义为:
typedef float MarkerData[3];
稍后在代码中,我将此标记位置数据的数组引用为:
MarkerData* Markers;
我正在使用这段代码来迭代这个数组:
for (int32 s = 0; s < totalMarkers; s++)
{
MarkerData* mData = (Markers + s);
markerPosition.X = *(mData)[0];
markerPosition.Y = *(mData)[1];
markerPosition.Z = *(mData)[2];
}
代码不会崩溃,但浮点值会混在一起。从调试中我可以看到,我在每次迭代中都正确获得了 markerPosition.X 值,但 Z 和 Y 是从其他数组中获取的。我想我在这里使用了错误的指针算术,但无论如何,都无法弄清楚。这个 typedef 对我来说真的很新,我不知道 - 可能有什么问题?
【问题讨论】:
-
int32 s = 0;应该是size_t s = 0; -
@πάνταῥεῖ 这值得商榷,可能取决于
totalMarkers的类型。 -
totalMarkers 类型为 int32
-
您能否提供minimal reproducible example 以及您获得的结果与您预期的结果之间的比较?用这么少的信息很难明确知道你做错了什么。
-
我强烈怀疑您打算将
*(mData)[0]的格式设置为(*mData)[0]。并且“不崩溃”绝不应该等同于“正确”。通过 Valgrind 运行它可能标记读取违规。