我是靠谱客的博主 清新人生,最近开发中收集的这篇文章主要介绍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];

最后

以上就是清新人生为你收集整理的VS2017 栈溢出异常:test dword ptr [eax],eax ; probe page.的全部内容,希望文章能够帮你解决VS2017 栈溢出异常:test dword ptr [eax],eax ; probe page.所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(57)

评论列表共有 0 条评论

立即
投稿
返回
顶部