Я пытался использовать GDB и Valgrind, но я не могу точно определить проблему.Интересно, что программа вылетает при нормальном выполнении и GDB, но не Valgrid.
Чтобы помочь вам следовать за кодом, вот основная идея программы: связываться с сервером через сокеты и UDP для передачи файла и обрабатывать некоторые основные потери пакетов.
Я не буду делиться кодом сервера, потому что я знаю, что проблема не в этом.Дело в том, что некоторые могут запутать то, что я сам реализую потерю пакетов с помощью генератора чисел.Сейчас он ничего не делает, кроме того, что заставляет программу использовать другой recvfrom.
Чтобы показать, как работает программа, клиент сообщает серверу, какой файл ему нужен, сервер сообщает клиенту, какой файл он собирается отправить, а затем отправляет его кусками (по 10 символов ввремя).
Выходные данные показывают, какой кусок отправлен, сколько символов получено и какова составная строка.
Передача файлов прошла успешно, что я могу сказать, это просто вызов fopen, который я использую для записи полученного файла, что доставляет мне проблемы.Не уверен, связано ли это с моим вызовом malloc или нет.
Вот исходный код:
pastebin.com / Z79hvw6L
Здесь приведены результаты выполнения CLI и Valgrind (GDB, похоже, не дает больше информации):
Обратите внимание, что CLI выдает ошибку повреждения памяти malloc, а Valgrind - нет.
CLI: http://pastebin.com/qdTKMCD2
VALGRIND: http://pastebin.com/8inRygnU
Спасибо за любую помощь!
Добавлены результаты GDB Backtrace
======= Backtrace: =========
/lib/i386-linux-gnu/libc.so.6(+0x6b961)[0x19a961]
/lib/i386-linux-gnu/libc.so.6(+0x6e15d)[0x19d15d]
/lib/i386-linux-gnu/libc.so.6(__libc_malloc+0x63)[0x19ef53]
/lib/i386-linux-gnu/libc.so.6(+0x5c2b8)[0x18b2b8]
/lib/i386-linux-gnu/libc.so.6(fopen+0x2c)[0x18b38c]
/home/---/client[0x8048dc2]
/lib/i386-linux-gnu/libc.so.6(__libc_start_main+0xe7)[0x145e37]
/home/---/client[0x8048871]
Может быть, это могло бы дать кому-то представление о том, в какой части программы находится ошибка?