mlloc()动态分配带指针的结构体内存,牛人看过来
放假前,牛人们来看看这个结构体怎么malloc内存,我选择1个字节对齐的
//心跳包结构,大小为20
typedef struct tagTHeartBeat
{
int type; //心跳类型
time_t lastSendTime;
time_t lastRecvTime;
int recvInterval;
int sendInterval;
}THeartBeat, *pHeartBeat;
//消息体结构, 大小为12
typedef struct tagTSocketMsg
{
tagTSocketMsg()
{
m_msg = NULL;
}
int msgType; //消息类型
int msgLen; //消息体长度
char *m_msg; //消息体,可以指向任意长度,这里希望存放心跳包,等会强转
}TSocketMsg, *pSocketMsg;
//因为这里存放心跳包,所以pMsg大小就是消息
1. TSocketMsg *pMsg = (TSocketMsg*)malloc(sizeof(TSocketMsg)+ sizeof(THeartBeat) - 4); //要减指针 m_msg长度吗
2. m_msg可以带不定长度的消息,我该如何为TSocketMsg的变量 动态分配内存呢? 如果我用send(, pMsg, XX)这里的长度该如何填呢?
3. TSocketMsg *pMsg = (TSocketMsg*)malloc(sizeof(TSocketMsg)+ sizeof(THeartBeat));
cout << sizeof(*pMsg) << endl; //为什么这里还是12,sizeof求出来的不是实际内存的大小吗? 这里*pMsg大小是多少呢?
如果TSocketMsg *pMsg = (TSocketMsg*)malloc(200);那么实际分配的大小应该是200吧?超出的部分怎么分配呢?