Вопрос по структурам С
Твои float[] живут в фрейме getTestSinData и умирают при выходе.
Не удержусь и пропиарю мегатул:
# clang -std=c99 1.c -o 1 -faddress-sanitizer -mllvm -asan-use-after-return=1
# ./1
ERROR: AddressSanitizer stack-use-after-return on address 0x7f473b643260 at pc 0x40726a bp 0x7fffcc5260d0 sp 0x7fffcc5260c8
READ of size 4 at 0x7f473b643260 thread T0
0x40726a in testInputs /tmp/test/1.c:51
0x4075e5 in main /tmp/test/1.c:56
0x7f473be61eff in ? ?:0
Address 0x7f473b643260 is located at offset 96 in frame <getTestSinData> of T0's stack:
This frame has 5 object(s):
[32, 48) 'input'
[96, 132) '.compoundliteral'
[192, 208) 'output'
[256, 292) '.compoundliteral9'
[352, 356) 'k'
Угу, понятно, благодарю
Под gcc мегатул, к сожалению, не работает , но благодарю за наводку, надо посмотреть в сторону подобных анализаторов ошибок использования памяти
под gcc для таких вещей работает valgrind
Он хотел, видимо, сказать "под винду". Но под винду валгринд тоже не работает. Бывает Pin (www.pintool.org который делает то же самое, что и валгринд.
Вот все что валгринд может сказать в этом случае:
Без поддержки со стороны компилятора очень сложно понять что происходит на стеке.
==3672== Conditional jump or move depends on uninitialised value(s)
==3672== at 0x4E7BA22: __printf_fp (printf_fp.c:404)
==3672== by 0x4E781E4: vfprintf (vfprintf.c:1628)
==3672== by 0x4E81275: printf (printf.c:35)
==3672== by 0x4006E5: testInputs (1.c:51)
==3672== by 0x400724: main (1.c:56)
==3688== Uninitialised value was created by a stack allocation
==3688== at 0x400687: testInputs (1.c:49)
Без поддержки со стороны компилятора очень сложно понять что происходит на стеке.
Если успеют, поддержку асана хотят сделать в 4.8. Тогда выйдет следующей весной. Если не успеют — еще следующей весной 

Оставить комментарий
valkiria77
Добрый день, столкнулся с проблемой, при написании программы на С. Сразу скажу, что С совсем не родной и не fluentОшибку удалось воспроизвести в таком редуцированном варианте.
Платформа: cygwin, компилятор gcc
Вывод:
Т.е. при чтении значений массива из функции где они устанавливаются, все нормально, но при передаче управления в другую ф-цию и чтения тех же ячеек памяти в них лежит какая-то лажа.
Кто нить может помочь определить ошибку?