处理无效指针的崩溃
Crashes dealing with invalid pointers
当我试图使用GDB调试服务器代码时,有时会得到一个对我来说毫无意义的堆栈跟踪。
示例:
-
函数的参数值,因为调用该函数的代码阻止了无效值,所以该参数值应该是不可能的。
-
迭代映射时崩溃,应该保证映射中的所有值都是有效的。
我的问题如下:
一个无效的指针(一个已经删除但仍在使用的指针,就像它是有效的一样(有可能破坏其他本来可以正常使用的代码吗?一个无效的指针会不会以某种方式扰乱std::映射内部的内存,即使指针与std::map无关?基本上,如果你的指针指向某个随机内存并对其进行操作,它是否可能使程序中的任何内容无效?
是的,如果你的指针真的很糟糕,那么几乎任何事情都可能发生。但也有可能是GDB未能正确重建执行状态,可能是因为堆栈已损坏,也可能是因为某些值已被优化而不存在。
恢复堆栈的难易程度取决于使用的处理器和该平台的ABI。如果你陈述了这些事情,也许还举了一个例子,那么可能会更明确。
这里有一个调试技巧:如果可以的话,在接近崩溃点之前,停止程序的执行,然后查看堆栈。记住一些相关对象的内存地址。然后,当程序执行得更深一点时,转储掉这些相同的对象,看看它们是否发生了变化。这将使您有信心相信堆栈跟踪中的哪些值。
是的,这是可能的。指针如果未初始化、删除但随后使用,则具有随机值,如果在其指针位置进行写入,则可以覆盖代码的任何部分或内存中的任何内容。此外,如果您定义的内存区域对于其数据来说太小,您可以覆盖程序/内存中的任何类型的代码。
作为C/C++程序员,你经常会遇到神秘的崩溃和核心转储,这通常是因为你试图使用无效的指针。
相关文章:
- 为什么要增加导致崩溃的指针
- 指针相关的UE4崩溃.我的指针哪里错了?
- 访问提升:shared_ptr 主范围外崩溃,断言失败:px != 0.指针的正确用法是什么?
- 当键是虚拟继承中涉及的基类指针时,对 std::unordered_map 项的访问崩溃
- 由于指针算法错误,代码在 memcpy 中崩溃
- 使用唯一指针调用函数会使我的程序崩溃
- 智能指针的排序向量:神秘崩溃
- 类指针方法崩溃程序
- 在C++中删除指针数组时析构函数崩溃
- 使用push_back方法获取智能指针矢量时应用崩溃
- 为什么此代码在此 Trie 实现中使用映射 c++ 中的指针崩溃?
- 从 GetProcAddress 获取的函数指针在使用 stdlib 时会使程序崩溃
- 在函数内部错误定位后,从函数中释放返回的指针会导致芯片崩溃
- 为什么此自定义指针类会崩溃?
- 函数和指针帮助:程序生成,但崩溃,没有任何特定错误
- 定义指针随机崩溃该程序
- 在崩溃时释放分配的指针的正确方法
- C++ Cout 在使用指针时崩溃
- 取消引用会导致崩溃,即使对于非 NULL 指针也是如此,原因也是如此
- 为什么此代码可能会在C++中崩溃(指针返回)