VS2017的C++开发心得(十二)调试——内存溢出和内存泄漏(中)

这篇要做一点改变,本来计划是怎么debug内存溢出,但由于内存溢出的方式各种各样,没有固定的debug方式,调试手段随机应变。所以这篇主要从内存分布来理解内存溢出问题,以及内存溢出可能造成的后果。

首先看看结构体的内存分布,代码如下:

#include <Windows.h>

struct SA
{
	double dArray[2];
	int t;
	SA()
	{
		FillMemory(dArray, sizeof(double), 0x11);
		FillMemory(dArray+1, sizeof(double), 0x22);
		FillMemory(&t, sizeof(int), 0x33);
	}
};
struct SB
{
	double dArray[2];
	SA* sa;
};
int main()
{
	SA testa;
	return testa.t;
}

上面的FillMemory主要是为了让它们的内存更容易区分,这个函数的作用就是在这块内存上填上对应的hex值。这个函数属于Windows标准库的,同样的还有ZeroMemory。

接下来通过内存窗口看看这个SA结构体的内存分布:

这样一看是不是很明了了,结构体的内存都是连续的,double占8字节,int占4字节。内存溢出实际上主要发生在对内存的直接操作上,也就是指针的使用。

下面我演示了一个数组访问越界的操作:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值