构造函数结束时老是报错:堆栈 Cookie 检测代码检测到基于堆栈的缓冲区溢出

_lee_chong 2018-11-01 11:53:10
网上说是数组越界,但我每次出这错误都是构造函数里:

class MetadataManager
{
private:
static MetadataManager _instance;

map<const MetadataBase*, vector<wstring>> _metadatas;

public:
MetadataManager();
~MetadataManager();

inline static MetadataManager& Instance() { return _instance; }

}



MetadataManager MetadataManager::_instance = MetadataManager();


MetadataManager::MetadataManager() :_metadatas()
{
}
...全文
1147 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
Mr·杨~~~ 2021-07-29
  • 打赏
  • 举报
回复

有没有解决这个问题的大佬,一直出现这个问题

super_admi 2018-11-03
  • 打赏
  • 举报
回复
你这是想做一个单例?C++的单例我不建议这么做。

如果是单线程,我一般会使用局部静态变量作为单例。
lkj2016 2018-11-03
  • 打赏
  • 举报
回复
真的不理解,有必要简单的instance非得写成这样,向量感觉没赋值
static MetadataManager _instance;前面加个final
构造函数改成private不行吗
Saleayas 2018-11-03
  • 打赏
  • 举报
回复
MetadataManager MetadataManager::_instance = new MetadataManager(); OR MetadataManager MetadataManager::_instance;
赵4老师 2018-11-01
  • 打赏
  • 举报
回复
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止
赵4老师 2018-11-01
  • 打赏
  • 举报
回复
检查是否资源泄漏的办法之一:
在任务管理器 进程 查看 选择列 里面选择:内存使用、虚拟内存大小、句柄数、线程数、USER对象、GDI对象
让你的程序(进程)不退出,循环执行主流程很多遍,越多越好,比如1000000次甚至无限循环,记录以上各数值,再隔至少一小时,越长越好,比如一个月,再记录以上各数值。如果以上两组数值的差较大或随时间流逝不断增加,则铁定有对应资源的资源泄漏!
_lee_chong 2018-11-01
  • 打赏
  • 举报
回复
引用 1 楼 zhao4zhong1 的回复:
崩溃的时候在弹出的对话框按相应按钮进入调试,按Alt+7键查看Call Stack即“调用堆栈”里面从上到下列出的对应从里层到外层的函数调用历史。双击某一行可将光标定位到此次调用的源代码或汇编指令处,看不懂时双击下一行,直到能看懂为止

崩溃在构造函数结束的大括号上,堆栈最上面 停在map的构造函数的最后一个大括号;
看到有人说时栈不够,我尝试过把“堆栈保留大小”设置成6291456(6兆),但还是出这个崩溃,每次出这个崩溃,我就把变量改成new指针,就可以了,但是隔一段时间又换一个地方(每次都是某个class的构造里)同样出这个崩溃;

64,282

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧