c-马洛克(Malloc)麻烦



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的开始,损坏TypeProtocol和一半。IP,因此使其无用。

有人知道我在这里出了什么问题吗?现在已经为此工作了几天,但是无论我尝试什么都无法解决这个问题...

试图增加堆的大小,但是无论我做什么,它似乎都保持在两个内存位置之间的12个字节。

OutboundData被给予地址 @0x1fca,因此仅在

之间仅12

为什么您对 OutboundData的地址感兴趣?

malloc()之后,您应该检查 OutboundData值,但是,您不会知道分配的内存的 size

要清楚,您不是复制到 OutboundData的地址,而是,您将复制到由指向的地址OutboundData

然后,

但是,一旦通过12个字节,它将开始覆盖struct端点的开始,损坏类型和协议以及一半的IP,从而使其之后无用。

不,不会。OutboundData value 地址不同,OutboundData value memcpy()中使用。

imho,只要

  • malloc()是成功
  • Data至少是尺寸20(对于这种情况)

您的memcpy()应该正常工作。

相关内容

  • 没有找到相关文章

最新更新