为什么以下代码中出现分段错误?

2023-12-03

我在维基百科上读到了这个

    int main(void)
 {

    char *s = "hello world";
    *s = 'H';

 }

当包含此代码的程序被编译时,字符串“hello world”被放置在程序可执行文件中标记为只读的部分中;加载后,操作系统将其与其他字符串和常量数据一起放置在内存的只读段中。执行时,变量 s 被设置为指向字符串的位置,并尝试通过该变量将 H 字符写入内存,从而导致分段错误**

我不知道为什么该字符串被放置在只读段中。请有人可以解释一下。


字符串文字存储在只读内存中,这就是它的工作原理。您的代码使用初始化为指向存储字符串文字的内存的指针,因此您无法有效地修改该内存。

要获取可修改内存中的字符串,请执行以下操作:

char s[] = "hello world";

那么就可以了,因为现在您只是使用常量字符串来初始化非常量数组。

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

为什么以下代码中出现分段错误? 的相关文章

随机推荐

  • Git svn 变基失败

    I use git svn跟踪 SVN 存储库 当我尝试做一个git svn rebase我收到此错误 Incomplete data Delta source ended unexpectedly 这是一个大型仓库 具有悠久的历史 仅仅获
  • MVC4 Windows 身份验证重定向到帐户/登录

    我正在设置Windows 身份验证在 MVC 4 应用程序中使用视觉工作室2013并使用IIS Express 开发服务器 但是 我被重定向到 Account Login 就好像我正在使用表单身份验证一样 我的 bin 文件夹 或任何地方
  • 在 RECEIVE_BOOT_COMPLETED 上通过广播接收器访问数据库

    当手机完成启动后 我想根据数据库中的小时 分钟 信息自动重新注册一些警报 我尝试使用广播接收器来执行此操作 但它不起作用 当尝试在启动时访问数据库 DB 帮助程序类时 它会崩溃 通过应用程序访问数据库帮助程序类时 它工作正常 这是可能的还是
  • boost::spirit::karma 输出引号内的字符串

    我正在尝试使用 boost spirit karma 转义引号中的字符串 如果它只是一个字符串 则效果很好 但是 对于 std vector 中 boost variant 中的字符串 则不然 只是打印字符串确实有效 但是我不太明白为什么
  • 字符串有隐藏字符,无法验证,

    大约2小时前我问了一个问题 不需要看问题 只是一个参考 使用node js存储图像出现错误 给出的解决方案实际上与我的代码相同 我试图找到我的代码和他的代码之间的差异 看看他做了什么修改才能使其工作 但没有任何修改 所以我想到尝试一下在线I
  • 既然“invoke”已被软弃用,那么替代方案是什么?

    rlang invoke 现已软弃用 purrr invoke 退休了 如今 以编程方式调用带有参数列表的函数的简洁方法是什么 tldr Use exec代替invoke use map2 plus exec代替invoke map 示例i
  • UIImagePickerController 如何隐藏翻转相机按钮?

    有没有办法隐藏 UIImagePickerController 内的翻转相机按钮 谢谢阅读 我最终使用 UIImagePickerController 的自定义子类来解决此 和其他 问题 import SMImagePickerContro
  • 将包含十六进制值的字节数组转换为十进制值

    我正在 c 中进行应用程序 这里我想将包含十六进制值的字节数组转换为十进制值 假设我有一个字节数组为 array 0 0X4E array 1 0X5E array 2 0X75 array 3 0X49 在这里 我想将该十六进制数组转换为
  • random_state在train_test_split和分类器中的作用

    基于这个答案 Scikit learn 中的随机状态 伪随机数 如果我使用相同的整数 比如 42 random state 然后每次进行训练 测试分割时 它应该给出相同的分割 即每次运行期间训练中的数据实例相同 测试时的数据实例相同 But
  • XSLT根据父子元素的值删除子元素

    我正在尝试使用这里使用的一些相同的逻辑https stackoverflow com a 10629806 662877 到不同的 XML 但没有得到预期的输出 如果 TERR KHM6 则删除 剥离这两个元素创建付款项目 and 创建支付
  • 一java内存刷新易失性:一个好的程序设计?

    这是与此相关的问题 java 在一个变量上使用 易失性 VS 每个变量 我有一个或多个不同的对象 我想改变其中的某些状态 然后我想让该状态对其他线程可见 出于性能原因 我不想使该对象中的每个成员变量都是易失性的 有时我想在单线程应用程序中使
  • Spring REST 服务:从请求中检索 JSON

    我正在 Spring 3 1 上构建 REST 服务 我正在使用 EnableWebMVC 注释 由于我的服务仅接受 JSON 请求 因此我还想将传入请求转储到 MongoDB 集合中以进行日志记录 以及稍后的数据转换 我想访问原始 JSO
  • 将 Cassandra OrderedMapSerializedKey 转换为 Python 字典

    我在 Cassandra 中有一列由列表映射组成 当使用 Python 驱动程序查询时 它返回一个 OrderedMapSerializedKey 结构 该结构是列表的映射 我想将整个查询放入 pandas 中 要从 OrderedMapS
  • 是在webview已经获取文件之后调用setDownloadListener onDownloadStart吗?

    WebView 是否会执行 Http Get 并下载完整文件 然后调用我的 onDownloadStart 方法 并且我的代码再次下载文件 在 Android 应用程序中使用的 WebView 中 我们需要处理 PDF 文件的下载 我看到的
  • 无法使用特殊主体“sa”

    当我尝试运行命令时 EXEC master sp addsrvrolemember loginame N sa rolename N serveradmin GO 我收到错误 消息 15405 级别 11 状态 1 过程 sp addsrv
  • 更改 WPF 中的按钮内容

    I have private void button1 MouseEnter object sender EventArgs e for int i 0 i gt 2 i button1 Content Convert ToString i
  • 如何在ngrx效果中进行http轮询

    我有这种效果 我尝试使用计时器每 x 秒轮询一次数据 但我无法弄清楚计时器应该如何与数据流交互 我尝试在顶部添加另一个 switchMap 但随后我无法将操作和有效负载传递给第二个 switchmap 有任何想法吗 我在看这个帖子但我的情况
  • Spring MVC 3 中的 MarshallingView

    当我使用 MarshallingView 封送我的 FileManagement 对象列表 java util List 时 出现此错误 如果我只向模型添加一个对象 则不会发生这种情况 所以它使用的是对象 而不是集合 List 例外 jav
  • Javascript 中的日期差异(忽略一天中的时间)

    我正在编写一个设备租赁应用程序 其中根据租赁期限 以天为单位 向客户收取租赁设备的费用 所以 基本上 每日费用 天数 总费用 为了获得客户端的即时反馈 我尝试使用 Javascript 来找出两个日历日期的差异 我四处寻找 但没有发现任何东
  • 为什么以下代码中出现分段错误?

    我在维基百科上读到了这个 int main void char s hello world s H 当包含此代码的程序被编译时 字符串 hello world 被放置在程序可执行文件中标记为只读的部分中 加载后 操作系统将其与其他字符串和常