i具有以下结构
struct NETWORK_ENDPOINT {
unsigned char Type;
unsigned char Protocol;
unsigned char IPv4[IPV4SIZE + 1];
unsigned int PortNumber;
unsigned char SocketIndex;
unsigned char RESERVED;
unsigned char *InboundData;
unsigned int InboundDataSize;
unsigned char *OutboundData;
unsigned int OutboundDataSize;
};
在我分配的代码中:
struct NETWORK_ENDPOINT *Endpoint = malloc(sizeof(struct NETWORK_ENDPOINT));
,然后在代码中,我将出现在。
Endpoint->OutboundData = malloc(20); // malloc() size may vary,
// but in the problem situation it is 20
然后我做:
memcpy(Endpoint->OutboundData, Data, 20);
然后是问题:从调试器中,我可以看到Endpoint
得到了地址 @0x1fd6,并且给出了OutboundData
地址 @0x1fca,因此仅12个。不应该是至少20吗?
然后,memcpy()
函数将填充在OutboundData
中(可以在内存中看到数据正确放置),但是一旦它通过12个字节,它将开始覆盖struct Endpoint
的开始,损坏Type
和Protocol
和一半。IP
,因此使其无用。
有人知道我在这里出了什么问题吗?现在已经为此工作了几天,但是无论我尝试什么都无法解决这个问题...
试图增加堆的大小,但是无论我做什么,它似乎都保持在两个内存位置之间的12个字节。
OutboundData被给予地址 @0x1fca,因此仅在
之间仅12
为什么您对 OutboundData
的地址感兴趣?
要清楚,您不是将复制到 然后, 但是,一旦通过12个字节,它将开始覆盖struct端点的开始,损坏类型和协议以及一半的IP,从而使其之后无用。 不,不会。 imho,只要 您的malloc()
之后,您应该检查 OutboundData
的值,但是,您不会知道分配的内存的 size OutboundData
的地址,而是,您将复制到由指向的地址OutboundData
。OutboundData
的 value 和地址不同,OutboundData
的 value 在memcpy()
中使用。malloc()
是成功Data
至少是尺寸20
(对于这种情况)memcpy()
应该正常工作。