VS2017 栈溢出异常:test dword ptr [eax],eax ; probe page.

最近在vs2017下开发时,程序编译正常,但是总是报栈溢出异常;经过多次检查代码和测试,发现栈空间太小导致异常;

【发现问题前】

1、创建线程时,使用的默认栈大小


2、线程内函数调用,分配了5MB内存(栈上分配)


3、调用DownLoadFile函数时,开辟栈空间失败,内存溢出


发生异常了

【问题分析】

以前版本的VS中,创建线程时不指定栈大小,使用系统默认配置,不会出现问题;但是,vs2017中就要注意了,临时缓存声明太大时,需要在线程创建时指定一个比临时缓存大的栈空间;否则,就使用全局缓存;

【解决方法】

1、创建线程时指定一个比临时缓存大的栈空间,我这里缓存只有5MB,那可以指定一个比5MB大一点的栈空间

m_hThread = CreateThread(NULL, 1024*1024*10, DownloadThread, svrAddr, 0, NULL);

2、把临时缓存放到函数外面去,也可以解决

BYTE byFileBuff[5 * 1024 * 1024];
bool CFastDFSClient::DownLoadFile(const char* szFastDfsFile, const char* szLocalFile)
{
std::string strFastDfsFile = szFastDfsFile;
std::string strLocalFile = szLocalFile;


UINT32 nRet;
BYTE *pbyFile = NULL;
UINT32 nFileSize= 0;
//BYTE byFileBuff[5 * 1024 * 1024];

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值