Последовательные идентичные вызовы "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локальные переменные.

Другие вопросы по тегам