我有以下结构
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;
};
Run Code Online (Sandbox Code Playgroud)
在我分配的代码中:
struct NETWORK_ENDPOINT *Endpoint = malloc(sizeof(struct NETWORK_ENDPOINT));
Run Code Online (Sandbox Code Playgroud)
然后在代码中我将分配OutboundData.
Endpoint->OutboundData = malloc(20); // malloc() size may vary,
// but in the problem situation it is 20
Run Code Online (Sandbox Code Playgroud)
然后我做:
memcpy(Endpoint->OutboundData, Data, 20);
Run Code Online (Sandbox Code Playgroud)
然后问题:从调试器我可以看到Endpoint给定地址@ 0x1fd6,并OutboundData给出地址@ 0x1fca,所以只有12之间.不应该是至少20?
该memcpy()函数然后将在填写OutboundData(可以在内存中的数据被正确地放置看到),但一旦在它通过12个字节时,它将开始覆盖该结构的开始Endpoint,破坏Type和Protocol和的一半IP,由此使得随后无用的.
有谁知道我在这里出错了什么?几天来一直在研究这个问题,但无论我尝试什么都不能解决这个问题......
试图增加HEAP大小,但无论我做什么,它似乎在两个内存位置之间保持12个字节.
OutboundData的地址为@ 0x1fca,因此只有12个
为什么你对地址 感兴趣OutboundData?
之后malloc(),你应该检查它的值 OutboundData,但是,你不会知道分配的内存大小 '这个.
为了清楚起见,你不是要复制到地址 OutboundData,而是复制到指向的地址 OutboundData.
然后,
但是一旦它传递了12个字节,它将开始覆盖struct Endpoint的开始,破坏Type和Protocol以及IP的一半,从而使之后无用.
不,它不会.的值和地址的OutboundData不同,并且所述值的OutboundData中使用memcpy().
恕我直言,只要
malloc() 是成功的Data至少是大小20(对于这种情况)你memcpy()应该工作得很好.
| 归档时间: |
|
| 查看次数: |
74 次 |
| 最近记录: |