C - openSuse下的内存分配

时间:2012-05-22 22:02:14

标签: c memory-management opensuse

我带着一个让我发疯的问题来找你。我在C中编写这个数据包保镖。它在Ubuntu下运行得非常好,但openSuse发生了一件非常奇怪的事情。在未针对当前测试执行的代码的一部分中,我声明了变量char *command;。当我用char *command = malloc(10);之类的东西初始化这个变量时,会发生一些事情并且它会改变一些其他变量(这里是我发送的数据包标题中的一些信息)。如果我稍后释放变量,则没有任何变化:free(command);。我对触及内存管理的所有内容都不是很了解,我无法想出这一点...... 您可能缺少一些信息来回答我的问题,请不要犹豫。 这是一个有效的版本(r146)和一个无效的版本(工作副本)之间的区别:https://www.dropbox.com/s/qs36fb0r6t8qcww/diff.txt 工作副本应该为软件添加对PORT ftp命令的支持。

感谢您的时间!

编辑:示例。 数据包保镖的作用类似于代理:

        ping            ping
client ------> bouncer -------> server

如果一切正常,保镖会用服务器的IP和发件人IP替换目标IP。保镖给出了一个不是其接口之一的新IP。当我分配这个变量时,保镖不使用其IP作为发送方IP,而是使用该机器的一个接口。它还搞乱了协议和数据包的标志。

EDIT2:valgrind给出了这两个错误:

* Creating socket
* Setting socket options
==4449== Syscall param socketcall.setsockopt(optval) points to uninitialised byte(s)
==4449==    at 0x513C7CA: setsockopt (in /lib64/libc-2.11.3.so)
==4449==    by 0x40226F: process_pkt (process_pkt.c:296)
==4449==    by 0x4E382ED: ??? (in /usr/lib64/libpcap.so.1.1.1)
==4449==    by 0x4E3B2C0: pcap_loop (in /usr/lib64/libpcap.so.1.1.1)
==4449==    by 0x40195E: main (bouncer.c:87)
==4449==  Address 0x7ff0002fc is on thread 1's stack
==4449== 
* Generating icmp packet
* Sending packet
==4449== Syscall param socketcall.sendto(to.sin_port) points to uninitialised byte(s)
==4449==    at 0x513C763: __sendto_nocancel (in /lib64/libc-2.11.3.so)
==4449==    by 0x4022BA: process_pkt (process_pkt.c:314)
==4449==    by 0x4E382ED: ??? (in /usr/lib64/libpcap.so.1.1.1)
==4449==    by 0x4E3B2C0: pcap_loop (in /usr/lib64/libpcap.so.1.1.1)
==4449==    by 0x40195E: main (bouncer.c:87)
==4449==  Address 0x7ff000302 is on thread 1's stack
==4449== 
* Packet sent

0 个答案:

没有答案