malloc之struct _CrtMemBlockHeader

struct _CrtMemBlockHeader
它存放了你申请的内存块信息,而这个结构体就存放在malloc所申请 返回的指针上面。

typedef struct _CrtMemBlockHeader
{
    struct _CrtMemBlockHeader *pBlockHeaderNext;//下一个结构体指针
    struct _CrtMemBlockHeader *pBlockHeaderPrev;//上一个结构体指针
    char    *szFileName;//szFileName是存储的发起分配操作的那行代码所在的文件的路径和名称
    int       nLine;//代码行号
    size_t  nDataSize;//请求分配的大小(字节)
    int        nBlockUse;//块类型。其中,1是自己调用、2为库函数调用、0为未调用。
    long     lRequest;   //堆申请次数
    unsigned char gap[nNoMansLandSize]; //溢出标志。其中,nNoMansLandSize = 4
} _CrtMemBlockHeader;
//在VS08 32位环境下
int *p = (int *)malloc(sizeof(int));

32字节的_CrtMemBlockHeader
+
4字节的申请空间
+
4字节的 unsigned char gap[nNoMansLandSize];//溢出标志

注意:两个溢出标志一旦有一个被修改,那么free释放空间时代码崩溃
int main()
{
	int *p = (int *)malloc(sizeof(int));
	/*
	*(p+1) = 1;
	free(p);
	*/崩溃
	*(p-1) = 1;
	free(p);//依旧崩溃
	return 0;
}

在这里插入图片描述
在这里插入图片描述
在Debug版本下, 申请的堆的可使用空间是用 ”CD” 符号填充的, “FD” 符号来防止越界, 在释放之后会使用 “EEFE” 符号来表示该区域是没有使用的区域。

如还有疑惑,请点击参考

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值