У меня возникли проблемы, идентифицирующие почему Valgrind бросает эту ошибку:Valgrind метания необъяснимой ошибки в потоке
==82185== Thread 2:
==82185== Use of uninitialised value of size 8
==82185== at 0x401B9A: proc_outconnection_thread (station.c:401)
==82185== by 0x4E3CDF4: start_thread (in /usr/lib64/libpthread-2.17.so)
==82185== by 0x51471AC: clone (in /usr/lib64/libc-2.17.so)
==82185==
the pass im sending is 'this'
==82185== Use of uninitialised value of size 8
==82185== at 0x401BCA: proc_outconnection_thread (station.c:403)
==82185== by 0x4E3CDF4: start_thread (in /usr/lib64/libpthread-2.17.so)
==82185== by 0x51471AC: clone (in /usr/lib64/libc-2.17.so)
==82185==
Как немного справочной информации, программа я пытаюсь создать в C имитирует железнодорожную станцию который использует TCP-соединения как «поезда». Я пытаюсь заставить программу использовать потоки, чтобы как слушать, так и пытаться подключаться к другим станциям (другие экземпляры программы).
Проблема, кажется, существует при передаче внутренней структуры данных функции создания потоков с помощью структуры аргументов, содержащей указатель на внутреннюю структуру данных. Таким образом, каждый поток имеет указатель на внутренние данные программ.
В моих усилиях тестирования, файл скомпилирован с gcc -pthread -g -o station station.c -Wall -pedantic -std=gnu99
Чтобы произвести свою ошибку, начните экземпляр станции с valgrind ./station tom authf logfile 3329 127.0.1.1
, а затем начать еще один экземпляр с valgrind ./station tim authf logfile 3328 127.0.1.1
Благодаря, если заявление в основном название станции с типом будет пытаться подключиться к tom, а tom создаст сокет и прослушает попытку подключения к ним. Соединение кажется успешным, но по какой-то причине я также не могу очистить соединение, чтобы отправить что-нибудь между ними, что, по моему мнению, может быть из-за того, что говорит мне Вальгринд. Странно, что когда поток создается для соединения с экземпляром tom, никаких ошибок в valgrind не возникает, несмотря на очень похожую процедуру для создания потока (те же аргументы передаются через указатель аргументов и выполняются те же присвоения).
Может ли это быть ложным положительным для конца Тима, или я делаю что-то серьезное здесь неправильно?
не ссылаются на исходный код. Разделите свой код на перевариваемый размер, который по-прежнему имеет ту же проблему и покажет его нам. –
компиляция кода под ubuntu linux 14.04 с использованием 'gcc', с параметрами' -Wall -Wextra -pedantic -std-c99' приводит к длинной строке предупреждающих сообщений. Настоятельно рекомендуем зафиксировать эти предупреждения. Предупреждения о неиспользуемых переменных и неиспользуемых параметрах являются лишь признаками неаккуратного программирования, но другие предупреждения, например, о плохих параметрах для некоторых вызовов функции fprintf(), более серьезны. Примечание: строки 403 и 405 (в моем редакторе) содержат fprintf(). – user3629249
В опубликованном коде есть несколько номеров 'magic'. «волшебные» номера делают код намного сложнее понять и представляют собой настоящую головную боль при выполнении обслуживания. Настоятельно рекомендуем вставлять enum или # define для этих чисел, с содержательными именами и использовать эти значащие имена во всем коде. – user3629249