什么是分段错误?

2024-03-17

什么是分段错误? C和C++有什么不同吗?分段错误和悬空指针有何关系?


分段错误是由于访问“不属于您”的内存而导致的一种特定错误。它是一种辅助机制,可以防止您破坏内存并引入难以调试的内存错误。每当你遇到段错误时,你就知道你在内存方面做错了——访问已经释放的变量、写入内存的只读部分等。在大多数语言中,段错误本质上是相同的,这会让你陷入混乱。对于内存管理,C 和 C++ 中的段错误之间没有主要区别。

产生段错误的方法有很多,至少在 C(++) 等较低级语言中是这样。出现段错误的常见方法是取消引用空指针:

int *p = NULL;
*p = 1;

当您尝试写入标记为只读的内存部分时,会发生另一个段错误:

char *str = "Foo"; // Compiler marks the constant string as read-only
*str = 'b'; // Which means this is illegal and results in a segfault

悬空指针指向一个不再存在的东西,如下所示:

char *p = NULL;
{
    char c;
    p = &c;
}
// Now p is dangling

指针p悬空,因为它指向字符变量c区块结束后就不再存在。当您尝试取消引用悬空指针时(例如*p='A'),你可能会遇到段错误。

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

什么是分段错误? 的相关文章

  • Ruby 解释器嵌入到 C 代码中

    我只是尝试书中的一个简单例子 我有一个 sum rb 文件 class Summer def sum max raise Invalid maximum max if max lt 0 max max max 2 end end 还有一个
  • 根据另一个列表的内容对列表进行排序

    我有一个包含整数列表的列表和另一个包含同时包含整数和字符串的类的列表 我想做的是按字母顺序对列表进行排序 将第一个列表中存在的条目放在前面 这是我的代码和预期输出 using System using System Collections
  • 限制纬度和经度值的模数

    我有代表纬度和经度的双精度数 我可以轻松地将经度限制为 180 0 180 0 具有以下功能 double limitLon double lon return fmod lon 180 0 360 0 180 0 这是有效的 因为一端是排
  • 获取光标相对于控件的位置 - C#

    我想获取鼠标相对于鼠标指针所在控件的位置 这意味着当我将光标置于控件的起点 左上角 时 它应该给出 0 0 我正在使用以下代码 private void panel1 MouseMove object sender MouseEventAr
  • 堆栈独立的C/C++蓝牙API?

    我想知道是否有适用于 Windows XP Vista 7 x86 和 x64 的堆栈独立 C C 蓝牙 api 我的目标是创建连接并通过蓝牙发送 接收一些时间关键的数据 我的研究给了我以下选择以及这项任务的缺点 用于蓝牙的 Windows
  • 实体框架 5 不清除导航属性

    我在 Entity Framework 5 中遇到了这个奇怪的问题 我在其中一个实体中有一个导航属性 我想将其设置为null 但由于某种原因 该属性只有在我第二次调用该属性时才会被清除 using var db new Entities v
  • 使用 std::string 导致 Windows“找不到入口点”[重复]

    这个问题在这里已经有答案了 当我用 G C C 编译它时 include
  • 将 gcov 与 CMake/CDash 结合使用的详细指南?

    我在我的项目中使用 CMake 并设置了 cdash 服务器以进行连续 夜间构建 一切运行良好 通过设置 crontab 我们可以将每小时 每晚的构建 测试结果自动上传到我们的 cdash 服务器 我的下一步是将测试覆盖率报告添加到构建中
  • 如何在Qt无框窗口中实现QSizeGrip?

    如何使用 Qt 无框窗口实现 QSizeGrip 代码会是什么样的 您只需在布局内窗口的一角添加 QSizeGrip 即可使其保持在该角落 QDialog dialog new QDialog 0 Qt FramelessWindowHin
  • 我需要一个树转储选项,该选项在当前的 gcc 版本中不再存在

    旧版本的 GCC 例如 4 0 2 或 4 1 2 有该选项 df see 用于调试程序或 GCC 的选项对于4 1 2 http gcc gnu org onlinedocs gcc 4 1 2 gcc Debugging Options
  • C# 列表框 ObservableCollection

    我正在尝试使用 ListBox DataSource ObservableCollection 但是我不知道如何在 OC 更新时让列表框自动更新 我可以在 OC 上挂接 CollectionChanged 事件 但是我需要对列表框执行什么操
  • C#中如何将委托转换为对象?

    我正在使用反射类来调用其他 dll 上的一些方法 方法的参数之一是委托类型 我想通过使用反射来调用这个方法 所以我需要将函数参数作为对象数组传递 但我找不到任何关于 如何将委托转换为对象 提前致谢 委托是一个对象 只需像平常一样创建预期的委
  • CS0246 找不到类型或命名空间名称“ErrorViewModel”(您是否缺少 using 指令或程序集引用?)

    我收到 CS0246 错误代码 我正在做一个 MVC net core 项目 我正在将 Razor 合并到我的 C 代码中 我在进行构建时收到此错误 我在最后一行收到错误 有人能帮我解决这个问题吗 global Microsoft AspN
  • C++ 静态工厂构造函数

    我正在进行模拟 它需要创建多个相当相似的模型 我的想法是有一个名为 Model 的类并使用静态工厂方法来构造模型 例如 模型 createTriangle or 模型 createFromFile 我从以前的 java 代码中汲取了这个想法
  • std::regex 转义正则表达式中使用的特殊字符

    我是字符串来创建一个std regex FILE 作为单元测试的一部分 检查一些打印文件名的异常输出 在 Windows 上失败并显示 regex error error escape 表达式包含无效的转义字符或尾随转义 因为 FILE 宏
  • g++4.9 不支持 std::align

    在学习对齐问题等时 我意识到我的 g 4 9 macports OS X 实现不支持std align 如果我尝试编译 使用 std c 11 此示例代码来自http www cplusplus com reference memory a
  • TypeScript 中 C# 类虚拟成员的等效项

    因此 在 C 中 当我创建模型类和延迟加载内容时 我会执行以下操作 public int User ID get set public int Dept ID get set 然后在我的班级稍远一点的地方 我像这样弹出我的虚拟 public
  • 可选参数代码在 .NET 3.5 中编译。为什么?

    这段代码在 VS 2010 的框架 3 5 项目中编译正常 我三次检查过 public LoggingClient string uri net msmq localhost logging 为什么 我在 C 4 规范中没有看到任何内容 文
  • 从哪里开始阅读 SQLite 源代码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我想了解sqlite是如何实现的 并且 想阅读源代码 我已经下载了源代码 我应该开始查看代码的哪一部分 SQLite文档页 http
  • AddressAccessDeniedException :无需 netsh 即可解决它?

    我遇到了异常AddressAccessDeniedException因为我的processus没有注册URL的权限 我首先以管理员身份运行我的程序 好的 它成功了 但我现在想要分发我的应用程序 并且我希望每个用户都能够运行它 而不必成为管理

随机推荐

  • 为什么空基类优化 (EBO) 在 MSVC 中不起作用?

    为什么空基类优化 EBO 在Visual C 中没有得到充分应用 如果我有很多基类 我有什么办法可以帮助编译器进行这种优化吗 include
  • iOS UITesting 如何关闭 Popover(iPad Popover 不是警报样式)

    我有一个非常复杂的应用程序 有很多视图和弹出窗口 用于快速选择条目 我无法关闭弹出窗口 我尝试了很多类似的 点击窗口中的坐标 app otherElements PopoverDismissRegion 击中后面的元素 弹出窗口 根本不可点
  • Python KafkaConsumer 从某个时间戳开始消费消息

    我计划跳过主题的开头 只读取从某个时间戳到结束的消息 关于如何实现这一目标有任何提示吗 我猜你正在使用kafka python https github com dpkp kafka python https github com dpkp
  • 如何将列表视图放置在 SingleChildScrollView 中但防止它们单独滚动?

    我有一个像这样的小部件树 SingleChildScrollView Column Container ListView or GridView 问题是 当我的小部件树如上所示时 它会给我错误 需要油漆 所以我像这样改变我的小部件树 Col
  • C# 十六进制转ascii

    我正在尝试使用以下命令将十六进制字符串转换为 ASCII public void ConvertHex String hexString StringBuilder sb new StringBuilder for int i 0 i lt
  • 如何从 Android 上的 sqlite 数据库中删除旧行?

    我有一个参数 用户可以在其中选择应存储数据的时间段 我读到了days多变的 记录添加到数据库时的日期和时间存储在KEY DATE ADDED 它的创建方式如下 SimpleDateFormat dateFormat new SimpleDa
  • git-ftp 在 repo 根目录中的文件夹和文件名中添加尖号 (#)

    I use Git ftp https github com git ftp git ftp scripts to uploading of my project via FTP on shared hosting But there is
  • 在 Golang 中导入模块时如何捕获错误?

    在golang中 当我导入一个模块时 它的init 被执行 我假设在main 之前 这个函数中可能会产生一些错误 我如何捕获这些错误并在我自己的代码中处理它们 正如你所知 Go 中的错误是返回值 由于 init 不返回任何内容 因此如果出现
  • 在android中,当应用程序因滑动而被杀死时,如何执行代码?

    所以基本上我在 xamarin 上使用 C 创建了一个应用程序 一切都运行完美 我调用了一个事件处理程序 当我按下 Android 上的后退按钮时 它不会退出应用程序 只是将其移动到后台 为此 我使用了 public override vo
  • Android 获取 Google Play 商店应用程序版本

    我正在使用此代码来获取 Google Play 商店应用程序版本 但这导致我的应用程序挂起 请指定获取应用程序版本的另一种方法 或者我如何使用此代码使应用程序不会挂起并成功运行 public class VersionChecker ext
  • 在 jQuery Mobile 的弹出窗口中打开外部页面

    我正在使用 jQuery Mobile 实际上我想在弹出窗口中打开外部链接 我试过这个 a href Open Dialog a
  • 在 Python 中合并数据帧时出现重复行

    我目前正在使用内部联接合并两个数据帧 但是 合并后 即使我合并的列包含相同的值 我也会看到所有行都是重复的 具体来说 我有以下代码 merged df pd merge df1 df2 on email address how inner
  • 如何在 django 中将图像添加到帖子中

    我正在构建一个博客系统 它允许用户将图像添加到他们的博客中 当用户添加图像时 图像会自动上传 这是在博客发布之前发生的 所以我应该如何处理上传的图像 这些图像有点像临时图像 因为如果用户发布博客 这些图像将会有该博客的外键 并保存到某个文件
  • AWS Lambda 函数无法调用同一 VPC 中的另一个 Lambda 函数

    我创建了一个VPC10 5 0 0 16有 2 个子网 10 5 1 0 24 10 5 4 0 24 我创建了一个安全组 入境规则 Type Protocol Port range Source Description optional
  • 真的有必要在每次应用程序启动时创建 SQLite 表吗?

    我在不止一个 SQLite 教程中注意到该表是在onCreate 扩展类的事件SQLiteOpenHelper 我已经在 Firefox 插件的帮助下在 Android 环境 Eclipse IDE 之外创建了 SQLite 数据库和表 数
  • SQL 更改表然后修改值

    我正在处理一个 SQL 脚本 当我创建 或编辑 列然后尝试修改该新列时遇到问题 例如 BEGIN ALTER TABLE SampleTable ADD ColumnThree int END IF EXISTS SELECT FROM s
  • 如何在 C# 控制台应用程序中获取光标处的字符?

    我知道如何设置光标到控制台中的特定点设置光标位置 or 光标向左 and 光标顶部一起 那不是问题 But 我怎样才能得到该点的值 难道没有类似的东西吗控制台 光标 那么我可以得到那个位置的角色吗 也许是这样的 char c Console
  • 动态创建的 d3 图表内的 Angular ng-click 不起作用

    我正在尝试使用 Angular 指令创建 d3 图表 我设法创建它 但问题是我想在图表元素上添加一些 ng click 事件 但我不太确定应该如何完成 这是我的指令 directive circleChart function parse
  • ASP.NET 主题示例/入门工具包

    我想知道是否可以在某个地方获得 ASP NET 的入门工具包 主题示例 我不是设计师 但我需要为一个项目构建一个原型 如果我自己做的话肯定会很糟糕 你知道我在哪里可以找到它 特定于 ASP NET 吗 Check http asp net
  • 什么是分段错误?

    什么是分段错误 C和C 有什么不同吗 分段错误和悬空指针有何关系 分段错误是由于访问 不属于您 的内存而导致的一种特定错误 它是一种辅助机制 可以防止您破坏内存并引入难以调试的内存错误 每当你遇到段错误时 你就知道你在内存方面做错了 访问已