WinDbg delete问题

2023-10-31

文章目录

1、测试程序如下:

#include "stdafx.h"
#include "CBaseDrvTest.h"

int _tmain(int argc, _TCHAR* argv[])
{

	CBaseDrvTest* pBase = new CBaseDrvTest;
	pBase->Init();
	std::cout << pBase->nValue << std::endl;

	delete pBase;
	pBase->UnInit();
	pBase->nLignt = 111;
	std::cout << pBase->nValue << std::endl;

	system("pause");
	return 0;
}

2、测试时发现测试所用的VS2008有时候也不会触发崩溃,抓取的dump信息如下:

0:000:x86> ~0s; .ecxr ; kb
ntdll_76e90000!NtWaitForMultipleObjects+0xc:
76f032fc c21400          ret     14h
Minidump doesn't have an exception context
Unable to get exception context, HRESULT 0x80004002
ChildEBP RetAddr  Args to Child              
005df0ec 76647ef3 00000003 005df320 00000001 ntdll_76e90000!NtWaitForMultipleObjects+0xc
WARNING: Stack unwind information not available. Following frames may be wrong.
005df280 76647da8 00000003 005df320 00000000 KERNELBASE!WaitForMultipleObjectsEx+0x133
005df29c 75ec6967 00000003 005df320 00000000 KERNELBASE!WaitForMultipleObjects+0x18
005df348 75ec6598 00000000 00000000 005df43c kernel32!WerpReportFaultInternal+0x3b7
005df364 75e9c299 005df40c 766fce6b 005df43c kernel32!WerpReportFault+0x9d
005df36c 766fce6b 005df43c 00000001 5c7948c7 kernel32!BasepReportFault+0x19
005df40c 76f3287e 005df43c 76f072f2 005dfddc KERNELBASE!UnhandledExceptionFilter+0x29b
005dfddc 76ef8774 ffffffff 76f1a120 00000000 ntdll_76e90000!__RtlUserThreadStart+0x3a109
005dfdec 00000000 00f37b48 00763000 00000000 ntdll_76e90000!_RtlUserThreadStart+0x1b

从上面看,没有相关的堆栈信息,接下来按照之前说过的方法操作,得到

dump信息
3、从dump信息看,应该是进程在退出的时候free内存出现了问题,导致了崩溃
提示**“scalar deleting destructor”**,怀疑是指针被delete、或者delete之后还使用了指针,即使用了野指针、或者被释放的内存越界等就会出现这个提示

4、除此之没有其他的信息,但是测试用例相对简单,所以我们可以直接查看源代码

5、从代码看,在delete之后,还使用指针访问了成员函数和成员变量。从调试来看,在delete之后,可以调用成员函数,只有当访问成员变量时,程序会中断(对于VS2008来说,也可能不会,偶现)

	delete pBase;
	pBase->UnInit();
	pBase->nLignt = 111;
	std::cout << pBase->nValue << std::endl;

因此delete一个指针时,指针指向的内存区域并不会被清空,因为这样会占用CPU周期,此时它是一个危险的指针,会造成一些未定义的现象(或者是个野指针,若打印成员变量的值可能是个随机值)。根据测试情况,有可能发生崩溃有可能不会,因此就会出现,这些代码可能长时间运行不崩溃的情况,接着可能在某个时间点或者修改了某些逻辑后发生了崩溃,这种问题在大型的项目中是比较难发现的,有时候也不好复现。因此在代码编写的时候我们就要养成良好的习惯,在delete指针之后,最好是将其置为NULL,保证我们所使用的是一个有效的指针,而不是会造成不可预见错误的野指针。
使用new或malloc分配内存时,C ++会在内存中找到一些未使用的空间,将其标记为“已分配”(以确保该空间不会在释放前再次被使用),并为我们提供其地址。当使用delete操作指针, C ++会将其指向的内存区域标记为“未分配”,并可能将其交给任何要求它的人。这时候这块空间就可以被其他人进行操作:写入或者读取。因此再次操作类对象或类成员就会出错,因为内存中的内容以及大小都可能发生了变化。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

WinDbg delete问题 的相关文章

  • WCF RIA 服务 - 加载多个实体

    我正在寻找一种模式来解决以下问题 我认为这很常见 我正在使用 WCF RIA 服务在初始加载时将多个实体返回给客户端 我希望两个实体异步加载 以免锁定 UI 并且我想利用 RIA 服务来执行此操作 我的解决方案如下 似乎有效 这种方法会遇到
  • Web 客户端和 Expect100Continue

    使用 WebClient C NET 时设置 Expect100Continue 的最佳方法是什么 我有下面的代码 我仍然在标题中看到 100 continue 愚蠢的 apache 仍然抱怨 505 错误 string url http
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 嵌套接口:将 IDictionary> 转换为 IDictionary>?

    我认为投射一个相当简单IDictionary
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 在 Windows 窗体中保存带有 Alpha 通道的单色位图会保存不同(错误)的颜色

    在 C NET 2 0 Windows 窗体 Visual Studio Express 2010 中 我保存由相同颜色组成的图像 Bitmap bitmap new Bitmap width height PixelFormat Form
  • 如何从 appsettings.json 文件中的对象数组读取值

    我的 appsettings json 文件 StudentBirthdays Anne 01 11 2000 Peter 29 07 2001 Jane 15 10 2001 John Not Mentioned 我有一个单独的配置类 p
  • 堆栈溢出:堆栈空间中重复的临时分配?

    struct MemBlock char mem 1024 MemBlock operator const MemBlock b const return MemBlock global void foo int step 0 if ste
  • 带动态元素的 WPF 启动屏幕。如何?

    我是 WPF 新手 我需要一些帮助 我有一个加载缓慢的 WPF 应用程序 因此我显示启动屏幕作为权宜之计 但是 我希望能够在每次运行时更改屏幕 并在文本区域中显示不同的引言 这是一个生产力应用程序 所以我将使用非愚蠢但激励性的引言 当然 如
  • 将多个表映射到实体框架中的单个实体类

    我正在开发一个旧数据库 该数据库有 2 个具有 1 1 关系的表 目前 我为每个定义的表定义了一种类型 1Test 1Result 我想将这些特定的表合并到一个类中 当前的类型如下所示 public class Result public
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 转发声明和包含

    在使用库时 无论是我自己的还是外部的 都有很多带有前向声明的类 根据情况 相同的类也包含在内 当我使用某个类时 我需要知道该类使用的某些对象是前向声明的还是 include d 原因是我想知道是否应该包含两个标题还是只包含一个标题 现在我知
  • 控件的命名约定[重复]

    这个问题在这里已经有答案了 Microsoft 在其网站上提供了命名指南 here http msdn microsoft com en us library xzf533w0 VS 71 aspx 我还有 框架设计指南 一书 我找不到有关
  • teracopy 如何替换默认的 Windows 副本

    我问了这个问题Windows 文件复制内部结构 动态加密 https stackoverflow com questions 24220382 windows file copy internals on the fly encryptio
  • 如何查看网络连接状态是否发生变化?

    我正在编写一个应用程序 用于检查计算机是否连接到某个特定网络 并为我们的用户带来一些魔力 该应用程序将在后台运行并执行检查是否用户请求 托盘中的菜单 我还希望应用程序能够自动检查用户是否从有线更改为无线 或者断开连接并连接到新网络 并执行魔
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • WPF/C# 将自定义对象列表数据绑定到列表框?

    我在将自定义对象列表的数据绑定到ListBox in WPF 这是自定义对象 public class FileItem public string Name get set public string Path get set 这是列表
  • 通过指向其基址的指针删除 POD 对象是否安全?

    事实上 我正在考虑那些微不足道的可破坏物体 而不仅仅是POD http en wikipedia org wiki Plain old data structure 我不确定 POD 是否可以有基类 当我读到这个解释时is triviall
  • C# 成员变量继承

    我对 C 有点陌生 但我在编程方面有相当广泛的背景 我想做的事情 为游戏定义不同的 MapTiles 我已经像这样定义了 MapTile 基类 public class MapTile public Texture2D texture pu
  • 对来自流读取器的过滤数据执行小计

    编辑问题未得到解答 我有一个基于 1 个标准的过滤输出 前 3 个数字是 110 210 或 310 给出 3 个不同的组 从流阅读器控制台 问题已编辑 因为第一个答案是我给出的具体示例的字面解决方案 我使用的实际字符串长度为 450 个

随机推荐

  • 爆发在即的赛道:十大生态30家常用跨链桥盘点

    写给用户的跨链桥工具集指南 作者 Azuma 编辑 郝方舟 出品 Odaily星球日报 ID o daily 随着 Solana Avalanche Fantom 等公链的集体爆发 新兴生态的造富效应正在抬头 为了追逐这些全新的财富机会 用
  • Materials Studio安装教程

    Materials Studio安装教程简易分享 看过了太多安装教程 需要破解license 总结了一下 出一版简单直装的教程供大家讨论 安装包 安装包放在pan了 链接 https pan baidu com s 1iEVBzuDzE T
  • nuclei poc模板编写笔记(二)

    匹配器 匹配器允许对协议响应进行不同类型的灵活比较 非常易于编写 并且可以根据需要添加多个检查以实现非常有效的扫描 类型 可以在请求中指定多个匹配器 基本上有6种类型的匹配器 Matcher Type Part Matched status
  • openGL之API学习(十)glReadBuffer

    该函数主要是确定颜色缓冲区的来源 不会影响到深度 模板等缓冲区的读取 这里的设置将会影响到glReadPixels glCopyTexImage1D glCopyTexImage2D glCopyTexSubImage1D glCopyTe
  • 解决Eclipse建立Maven项目后无法建立src/main/java资源文件夹的办法

    建立好一个Maven项目后 如果Java Resources资源文件下没有src main java文件夹 并且在手动创建这个文件时提示 已存在文件 这说明 在这个项目配置中已经有了src main java这个文件夹 至于为什么不显示 我
  • 人脸属性识别 - 使用多任务学习模型在CelebA数据集上进行人脸属性识别任务

    在本博客中 我们将介绍如何使用多任务学习 Multi Task Learning MTL 模型在CelebA数据集上进行人脸属性识别 我们将详细介绍数据准备 模型构建 训练和评估的过程 最后 我们将展示如何使用训练好的模型对新的图像进行属性
  • dn-detr:通过去噪任务加速detr训练

    dn detr 通过去噪任务加速detr训练 论文链接 https arxiv org abs 2203 01305 自DETR问世以来 transformer被引入到了目标检测领域 DETR通过引入query和bipartite grap
  • 基础算法5——双指针

    双指针算法 双指针是一种编程思想 不是某种具体的编程套路或是算法 很多需要双重暴力循环解决的问题 用双指针的思想都可以大大减少复杂度 for i 0 j 0 i lt n i while j lt i check i j j 每道题目的具体
  • 【疑难杂症】解决苹果MacOS升级提示“验证固件时发生错误”,无论如何都无法升级更新,主板Boot Rom、SMC版本号更新!

    如果你试了网上流传的通用解决办法 dmg没出错 修改dns 修改系统时间 断网安装 制作U盘镜像等 还没有升级成功 很可能你和我遇到的是同样问题 我的机器是Macbook Pro 2015 具体型号是mf840 工作原因平时不怎么敢升级系统
  • 2018 公开课盘点学术篇:链接优秀年轻 AI 学者,「大讲堂」让新生 AI 学术力量被看见...

    雷锋网 公众号 雷锋网 AI 科技评论按 2018 年 AI 研习社为大家呈上了一系列公开课 让更多的 AI 学术人员得以分享 传播自己的研究成果 也让科技爱好者们 学生们 其它研究人员们增进了对人工智能相关思维 知识 应用的认识 为国内人
  • 【大数据】Flink 从入门到实践(一):初步介绍

    Flink 从入门到实践 一 初步介绍 Apache Flink 是一个框架和分布式处理引擎 用于在 无边界 和 有边界 数据流上进行 有状态 的计算 Flink 能在所有常见集群环境中运行 并能以内存速度和任意规模进行计算 1 架构 1
  • Git上传文件代码到GitHub(超详细)

    Git上传文件代码到GitHub 超详细 之前用git上传代码到GitHub上 时间一长又忘了 总结一下写下来 后面上传忘了再看 1 新建一个空文件夹 用来上传文件 空文件夹放在那里都可以 2 点进去空文件夹 鼠标右键 使用Git Bash
  • 淘汰赛冠军问题

    问题描述 有n个选手 n为2的K次方 进行比赛 两个选手中胜者参加下一场 负者出局 请求出最后的冠军 比赛的胜负由cmp 函数决定 这里是比较两个字符的大小 分析 本体很快可以想到两种方法 分治法和减治法 分治法 将选手平均分为两组 递归求
  • Github上 10 个开源免费且优秀的后台控制面板

    来自 简书 作者 SevDot 链接 https www jianshu com p 3bc7404af887 Web 开发中几乎的平台都需要一个后台管理 但是从零开发一套后台控制面板并不容易 幸运的是有很多开源免费的后台控制面板可以给开发
  • uniapp AES加密解密

    uniapp里我知道的有两种aes加密解密方式 一 引入crypto js 1 需要在uniapp项目根目录里 打开命令行 执行如下命令 npm install crypto js 2 在项目根目录 创建一个utils文件夹 并创建一个ae
  • windows下ejbCA的安装和配置

    本文是windows平台的ejbCA配置记录 配置过程中参考了很多网上的资料 在此表示感谢 参见 http job2job blog 163 com blog static 1416633120071162154863 http www c
  • 解决Windows因丢失vcruntime140.dll文件无法运行程序问题

    其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题 如果是新手第一时间会认为是软件或游戏出错了 其实并不是这样 其主要原因就是你电脑系统的该dll文件丢失了或者损坏了 这时你只需下载这个vcruntime140 dll文件进行安装 前
  • C#实现图片压缩算法,精简高效(含源码)

    C 实现图片压缩算法 精简高效 含源码 图片压缩可以有效地减小图片文件的大小 加快页面加载速度 并降低带宽占用 本文将介绍一种基于C 语言实现的图片压缩算法 其具有精简高效的特点 可以帮助你快速实现压缩图片的功能 压缩算法主要分为有损压缩和
  • 4.8 服务器上的 Git - GitLab

    4 8 服务器上的 Git GitLab 版本说明 版本 作者 日期 备注 0 1 loon 2019 3 26 初稿 目录 文章目录 4 8 服务器上的 Git GitLab 版本说明 目录 GitLab 1 安装 Figure 50 B
  • WinDbg delete问题

    文章目录 1 测试程序如下 include stdafx h include CBaseDrvTest h int tmain int argc TCHAR argv CBaseDrvTest pBase new CBaseDrvTest