Я использую сторонний код, тип которого определен как:
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;
- person πάντα ῥεῖ   schedule 15.06.2017totalMarkers
. - person François Andrieux   schedule 15.06.2017*(mData)[0]
был(*mData)[0]
. И не сбой никогда не следует приравнивать к правильному. Выполнение этого через Valgrind скорее всего пометит нарушения чтения. - person WhozCraig   schedule 15.06.2017(mData)
ничего не делают.*(abc)[splat]
означает то же самое, что и*abc[splat]
. Скобки должны заключать два или более маркера синтаксиса, чтобы фактически выполнять группировку, тем самым влияя на анализ синтаксиса. Исключением может быть что-то вроде#define mData badly + behaved
, где автор макроса забыл круглые скобки, поэтому они нужны вызывающей стороне. - person Kaz   schedule 15.06.2017