我试过使用GDB和Valgrind,但我似乎无法找出问题所在。 有趣的是,程序在正常执行和GDB期间崩溃,但不是Valgrid。malloc内存损坏,打开
为了帮助您跟随代码,继承人程序的基本点: 通过套接字和UDP与服务器通信传输文件,并处理一些基本的数据包丢失。
我不会共享服务器的代码,因为我知道问题不在那里。 可能会让一些人感到困惑的一点是,我正在使用数字生成器自己实现数据包丢失。现在它并没有做任何事情,除了让程序使用另一个recvfrom。
为了引导您完成程序输出,客户端会告诉服务器它想要什么文件,服务器会告诉客户端文件将发送多大,然后以块(一次10个字符)。
输出显示发送了哪些块,接收了多少个字符以及连接字符串是什么。
从我所知道的文件传输成功,它只是我用来写收到的文件,给我麻烦的打字电话。不知道这是否与我的malloc调用或不。
这里是源代码:
pastebin.com/Z79hvw6L
下面是从CLI执行的输出,和(似乎GDB不提供任何更多信息)Valgrind的:
注意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]
也许这可以给别人的洞察力,以什么部分程序的错误是吗?
一般而言,如果您无法在帖子的上下文中发布相关来源子集,则不会收到很多回复。 – Joe
你为什么不在valgrind的崩溃位置发布回溯?我敢打赌,如果你得到了回溯,那么在损坏的内存(崩溃点)上设置一个内存观察点会引发你的问题。 – dbeer
你是什么意思乔?我认为问题出在哪里? – user974703