为什么在更改 main 的签名时会出现段错误?

2023-12-01

我试图涉足 C 语言,并编写了这个程序,在随机位置显示我的 RAM 的 kb。这是代码,并且运行良好:

#include <stdio.h>

int main(){
    char *mem;
    for(int i =0; i < 1024; i++){
        mem++;
        printf("%c", *mem);
    }
    return 0;
}

之后,我对代码进行了以下更改,每次运行程序时都会出现段错误:

#include <stdio.h>


// Just added this signature
int main(int argc, char *argv[]){
    char *mem;
    for(int i =0; i < 1024; i++){
        mem++;
        printf("%c", *mem);
    }
    return 0;
}

我的蜘蛛感觉告诉我,我得到的段错误是随机的,也应该是在第一个示例中引起的,但是一次又一次地运行不同的程序使它看起来像是可预测的行为。

$ gcc -v
Configured with: --prefix=/Applications/Xcode.app/Contents/Developer/usr --with-gxx-include-dir=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.11.sdk/usr/include/c++/4.2.1
Apple LLVM version 7.3.0 (clang-703.0.31)
Target: x86_64-apple-darwin15.6.0
Thread model: posix
InstalledDir: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin

你的两个片段都会调用未定义的行为当你尝试

  1. 出界(mem++;,没有分配)
  2. 使用未初始化的值(访问*mem )

与当前版本。

请记住,指针不会神奇地继承(或获取)内存,一般来说,您需要使指针指向有效的内容。

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

为什么在更改 main 的签名时会出现段错误? 的相关文章

  • WPF DataGrid 多选

    我读过几篇关于这个主题的文章 但很多都是来自 VS 或框架的早期版本 我想做的是从 dataGrid 中选择多行并将这些行返回到绑定的可观察集合中 我尝试创建一个属性 类型 并将其添加到可观察集合中 它适用于单个记录 但代码永远不会触发多个
  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 通过引用传递 [C++]、[Qt]

    我写了这样的东西 class Storage public Storage QString key const int value const void add item QString int private QMap
  • C++11 删除重写方法

    Preface 这是一个关于最佳实践的问题 涉及 C 11 中引入的删除运算符的新含义 当应用于覆盖继承父类的虚拟方法的子类时 背景 根据标准 引用的第一个用例是明确禁止调用某些类型的函数 否则转换将是隐式的 例如最新版本第 8 4 3 节
  • 随着时间的推移,添加到 List 变得非常慢

    我正在解析一个大约有 1000 行的 html 表 我从一个字符串中添加 10 个字符串 td 每行到一个list td
  • free 和 malloc 在 C 中如何工作?

    我试图弄清楚如果我尝试 从中间 释放指针会发生什么 例如 看下面的代码 char ptr char malloc 10 sizeof char for char i 0 i lt 10 i ptr i i 10 ptr ptr ptr pt
  • 从经典 ASP 调用 .Net C# DLL 方法

    我正在开发一个经典的 asp 项目 该项目需要将字符串发送到 DLL DLL 会将其序列化并发送到 Zebra 热敏打印机 我已经构建了我的 DLL 并使用它注册了regasm其次是 代码库这使得 IIS 能够识别它 虽然我可以设置我的对象
  • 需要帮助优化算法 - 两百万以下所有素数的总和

    我正在尝试做一个欧拉计划 http projecteuler net问题 我正在寻找 2 000 000 以下所有素数的总和 这就是我所拥有的 int main int argc char argv unsigned long int su
  • 访问外部窗口句柄

    我当前正在处理的程序有问题 这是由于 vista Windows 7 中增强的安全性引起的 特别是 UIPI 它阻止完整性级别较低的窗口与较高完整性级别的窗口 对话 就我而言 我想告诉具有高完整性级别的窗口进入我们的应用程序 它在 XP 或
  • 人脸 API DetectAsync 错误

    我想创建一个简单的程序来使用 Microsoft Azure Face API 和 Visual Studio 2015 检测人脸 遵循 https social technet microsoft com wiki contents ar
  • 结构体的内存大小不同?

    为什么第一种情况不是12 测试环境 最新版本的 gcc 和 clang 64 位 Linux struct desc int parts int nr sizeof desc Output 16 struct desc int parts
  • C# - 当代表执行异步任务时,我仍然需要 System.Threading 吗?

    由于我可以使用委托执行异步操作 我怀疑在我的应用程序中使用 System Threading 的机会很小 是否存在我无法避免 System Threading 的基本情况 只是我正处于学习阶段 例子 class Program public
  • 为什么这个字符串用AesCryptoServiceProvider第二次解密时不相等?

    我在 C VS2012 NET 4 5 中的文本加密和解密方面遇到问题 具体来说 当我加密并随后解密字符串时 输出与输入不同 然而 奇怪的是 如果我复制加密的输出并将其硬编码为字符串文字 解密就会起作用 以下代码示例说明了该问题 我究竟做错
  • C# xml序列化必填字段

    我需要将一些字段标记为需要写入 XML 文件 但没有成功 我有一个包含约 30 个属性的配置类 这就是为什么我不能像这样封装所有属性 public string SomeProp get return someProp set if som
  • 实例化类时重写虚拟方法

    我有一个带有一些虚函数的类 让我们假设这是其中之一 public class AClassWhatever protected virtual string DoAThingToAString string inputString retu
  • 如何在 Android 中使用 C# 生成的 RSA 公钥?

    我想在无法假定 HTTPS 可用的情况下确保 Android 应用程序和 C ASP NET 服务器之间的消息隐私 我想使用 RSA 来加密 Android 设备首次联系服务器时传输的对称密钥 RSA密钥对已在服务器上生成 私钥保存在服务器
  • 在 WPF 中使用 ReactiveUI 提供长时间运行命令反馈的正确方法

    我有一个 C WPF NET 4 5 应用程序 用户将用它来打开某些文件 然后 应用程序将经历很多动作 读取文件 通过许多插件和解析器传递它 这些文件可能相当大 gt 100MB 因此这可能需要一段时间 我想让用户了解 UI 中发生的情况
  • 使用特定参数从 SQL 数据库填充组合框

    我在使用参数从 sql server 获取特定值时遇到问题 任何人都可以解释一下为什么它在 winfom 上工作但在 wpf 上不起作用以及我如何修复它 我的代码 private void UpdateItems COMBOBOX1 Ite
  • C++ 中的 include 和 using 命名空间

    用于使用cout 我需要指定两者 include
  • 当文件流没有新数据时如何防止fgets阻塞

    我有一个popen 执行的函数tail f sometextfile 只要文件流中有数据显然我就可以通过fgets 现在 如果没有新数据来自尾部 fgets 挂起 我试过ferror and feof 无济于事 我怎样才能确定fgets 当

随机推荐

  • 如何使用 brython 来使用 OpenCV python 库 [重复]

    这个问题在这里已经有答案了 我有一个功能齐全的Python项目 已经直接通过终端进行了测试 但是当我搜索如何将 Python 代码与 JavaScript 包装器集成时 我发现很少有开源 API http www brython info
  • 如何使用 R 将 csv 转换为 xls?

    我有一个包含数百个 CSV 文件的文件夹 使用 R 将这些文件转换为 XLS 格式的最简单方法是什么 是的 我知道 CSV 与 Excel 兼容 但我仍然有充分的理由转换它们 使用包xlsReadWrite导出到 xls library x
  • 如何让 MAMP 读取 .htaccess 文件

    我正在尝试获取 htaccess在 MAMP 工作 的内容 htaccess是一个简单的重定向行 但整个 htaccess 文件似乎没有任何效果 即使我将其更改为包含无效数据也是如此 MAMP 中是否有任何设置需要更改才能启用 htacce
  • 在QFileDialog pyqt5中选择文件或文件夹

    我的脚本当前使用 QtWidgets QFileDialog getOpenFileNames 让用户在 Windows 资源管理器中选择文件 现在我想知道是否有办法让他们也选择文件夹 而不仅仅是文件 有一些类似的帖子 但没有一个提供有效的
  • 如何在Web浏览器上部署swing应用程序?

    我开发了一个大型秋千应用程序 有几个类 每个类都创建自己的类JFrame同时关闭上一个称为此类的类 我希望将其部署到网络浏览器中 并了解我需要将其转换为小程序 我是否必须在每个类中添加用于创建小程序的代码 或者还有其他方法吗 在我目前的情况
  • 使用 SSO(例如 Keycloak),如何处理/同步自己数据库中的用户?

    考虑以下场景 您有一个 SSO 服务 比方说 Keycloak 和 X 应用程序 它们有自己的数据库 在每个数据库的某个位置 您引用一个user id 这要怎么处理呢 如何解决外来约束问题 是否应该同步 Keycloak 和应用程序 如何
  • Visual Studio Express 抱怨缺少“;”输入c程序后

    我的代码有什么问题 include
  • 计算本周星期一的日期

    目标 如果当前星期几是星期一以外的任何一天 则显示本周星期一的日期 如果本周的当天是星期一 则只需显示今天的日期 这是我写的 我认为它有效 但可能不是确定日期的最干净的方法 话虽如此 有没有人看到代码错误或不起作用的任何原因
  • 如何添加尚未在plugins.cordova.io上注册的cordova插件?

    喜欢这些插件 https github com ArchieGoodwin SilentShot https github com alongubkin phonertc 他们没有 tarball 网址 cordova plugin add
  • 如何将 Unity 与内部类一起使用?

    我有一个 Web API 应用程序 并使用 Unity 进行依赖项注入 该应用程序使用包含接口 IDoStuff 和实现该接口的类的库 internal interface IDoStuff void DoSomething interna
  • 将txt的特定行放入数组中

    我正在为我的 C 课程制作一个 谁想成为百万富翁 游戏 我有 15 篇文章 每篇有 3 个问题 答案 例子 Whats the capital of Brasil Rio de Janeiro Brasilia Sao Paulo Curi
  • 评估转义字符串

    我的文件中有一些已经转义的字符串 所以文件的内容如下所示 Hello nWorld This is tGreat 当我阅读该文件时 我得到 n作为两个不同的角色而不是一个 如何将转义字符串转换为非转义字符串 基于 deAtog的代码 我做了
  • 设置单元格 (n) 颜色索引等于单元格 (n - 1) 颜色索引

    我从这个宏中得到了一个奇怪的输出 宏应该使用上面的颜色填充空白单元格 创建一个颜色块 结果不是我所期望的 尽管Debug Print显示相同ColorIndex number 知道这里发生了什么吗 Option Explicit Sub C
  • 如何从 BigQuery 中的 Openstreet 地图数据集中提取所有国家/地区几何图形

    我正在使用此查询使用 OSM 提取所有国家 地区的几何形状 它工作正常 但我确信 它正在创建重复项 因为我使用国旗作为参考 有些地方有国旗 但它们并不是真正的国家 地区 SELECT feature type osm id osm time
  • 从 Eclipse 中使用自定义 Firefox 配置文件启动 Selenium

    我正在 Eclipse 中运行 Selenium 测试 但无法加载自定义 Firefox 配置文件 大多数消息来源建议我需要像这样启动 Selenium 服务器 java jar selenium server jar firefoxPro
  • 使用 Entity Framework 4 在运行时打开 SQL CE 文件

    我正在开始使用 Entity Framework 4 并创建一个演示应用程序作为学习练习 该应用程序是一个简单的文档生成器 它使用 SQL CE 存储 每个文档项目都有自己的 SQL CE 数据文件 用户打开这些文件之一来处理项目 EDM
  • 正确的用户输入 - x86 Linux 汇编

    所以我正在使用 NASM 为 Linux 开发一个 x86 汇编程序 该程序主要询问用户的姓名和最喜欢的颜色 执行此操作并将两个字符串存储在 bss 部分中声明的变量中后 程序会打印 No way用户名 最喜欢的颜色也是我最喜欢的颜色 我遇
  • 如何使用Python计算目录中的文件数量

    我如何只计算files在目录中 这将目录本身算作一个文件 len glob glob os listdir 会比使用稍微更有效glob glob 要测试文件名是否是普通文件 而不是目录或其他实体 请使用os path isfile impo
  • 在单独的页面中打印 Javascript? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 目前不接受答案 我目前正在使用 PHP 并获取完整的用户详细信息并将其显示到 html 表中 我遇到的问题是 当我打印 3 个表格时 每个表格都完美地打印在每页上
  • 为什么在更改 main 的签名时会出现段错误?

    我试图涉足 C 语言 并编写了这个程序 在随机位置显示我的 RAM 的 kb 这是代码 并且运行良好 include