Последовательные идентичные вызовы "printf" дают различный вывод
Я вызываю функцию printf последовательно, и первый printf пишет то, что должен написать, второй printf просто записывает недопустимые значения, и я предполагаю некоторые ошибки.
Тип "LOC" определяется мной, и переменная "i" не меняется после вызовов. Я проверил double на наличие расхождений между printf и значениями, которые я ему предоставляю.
i=2;
printf("x = %f,y = %f,z = %f\n",(*LOC)[0].ProjectionPoints[i].X,(*LOC)[0].ProjectionPoints[i].Y,(*LOC)[0].ProjectionPoints[i].Z); /* Prints perfectly */
printf("x = %f,y = %f,z = %f\n",(*LOC)[0].ProjectionPoints[i].X,(*LOC)[0].ProjectionPoints[i].Y,(*LOC)[0].ProjectionPoints[i].Z); /* Shows some errors and values are "0" */
Первый printf пишет
x = -10.000000,y = -8.000000,z = -10.000000
Второй printf пишет
x = 0.000000,y = 0.000000,z = -1.#QNAN0
Даже определение переменных как const
ничего не меняет
Мой компилятор: MS Visual C++ 2012
После того, как я прочитал комментарии;
typedef struct {
P3C_Point *ProjectionPoints;
uint Distance,LayerID,NumberOfPoints,ModelID;} P3C_LayerOnCurtain;
/* and */
P3C_LayerOnCurtain **LOC = P3C_Compile(Stream);
/* when I try printf in P3C_Compile it has no problems */
Я сделал тест, прежде чем вернуть значение, в функции выдает "LOC" - это printf отлично.
Ответ / Решение;
P3C_LayerOnCurtain *LOC = *P3C_Compile(Stream);
1 ответ
Наиболее вероятной причиной было бы то, что LOC
или же (*LOC[0].ProjectionPoints)
являются указателями на локальную переменную функции, которая их вернула.
Если это так, они будут перезаписаны printf
локальные переменные.