我已经尝试使用GDB和Valgrind,但似乎无法确定问题所在。有趣的是,在正常执行和GDB期间程序会崩溃,但在Valgrid中不会。
为了帮助你跟踪代码,这里是程序的基本要点:通过套接字和UDP与服务器通信以传输文件,并处理一些基本数据包丢失。
我不会分享服务器的代码,因为我知道问题不在那里。可能会让一些人困惑的是,我正在使用数字生成器自己实现数据包丢失。目前它并没有做什么,只是让程序使用另一个recvfrom。
为了引导您浏览程序的输出,客户端告诉服务器它想要哪个文件,服务器告诉客户端它将要发送多大的文件,然后分块发送(每次发送10个字符)。
输出显示发送了哪个块,收到了多少个字符以及连接后的字符串是什么。
从我所看到的来看,文件传输成功了,只是我用来写接收文件的fopen调用给我带来了麻烦。不确定是否与我的malloc调用有关。
下面是源代码:
请注意,CLI给出了一个malloc内存损坏错误,而Valgrind没有。
CLI: http://pastebin.com/qdTKMCD2 VALGRIND: http://pastebin.com/8inRygnU 感谢您的任何帮助!
已添加GDB回溯结果
也许这能帮助有人了解程序中出错的部分?
为了帮助你跟踪代码,这里是程序的基本要点:通过套接字和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: =========
/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]
也许这能帮助有人了解程序中出错的部分?