gpt4 book ai didi

c - malloc 的问题

转载 作者:行者123 更新时间:2023-11-30 18:25:24 26 4
gpt4 key购买 nike

我有以下结构

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));

然后在代码中我分配 OutboundData。

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个字节,就会开始覆盖结构Endpoint的开头,破坏TypeProtocol以及一半的IP,从而使其无用然后。

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

已尝试增加 HEAP 大小,但无论我做什么,两个内存位置之间似乎都保持在 12 个字节......

最佳答案

OutboundData is given address @0x1fca, so only 12 between

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

malloc()之后,您应该检查OutboundData,但是,您不会知道已分配内存的大小。

需要明确的是,您不是复制到OutboundData的地址,而是将复制到 OutboundData 指向的地址。

那么,

but once it passes 12 bytes, it will begin overwriting the start of the struct Endpoint, corrupting the Type and Protocol and half the IP, thereby making it useless afterwards.

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

恕我直言,只要

  • malloc() 成功
  • 数据 的大小至少为 20(对于本例)

你的memcpy()应该可以正常工作。

关于c - malloc 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30164003/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com