代码中未初始化的指针

2024-02-12

我正在学习 C++,我发现指针如果未初始化可能会指向内存中的随机位置,并产生内存可能被其他程序使用的问题。

现在,如果是这种情况,我们就不应该在代码的任何部分包含这一行:

int* ptr;

相反,我们应该有类似的东西

int* ptr = NULL; //Is this going to avoid the problem

请建议,因为我已经看过第一行(int* ptr;)在很多书中,所以我有这个疑问。如果可能的话还举一些例子。


int* ptr = NULL; //Is this going to avoid the problem

这会导致ptr指向NULL您可以明确检查它作为默认/未初始化值。它可以防止您描述的问题,但粗心的程序员仍然可能在不检查的情况下意外取消引用空指针,从而导致未定义的行为。

主要优点是方便您检查是否ptr已经或尚未初始化为任何内容,即:

 if (ptr != NULL)
 {
     // assume it points to something
 }

由于这是非常惯用的,因此不初始化指向的指针非常危险NULL。该指针将被初始化为一个非 NULL 垃圾值,该值并不真正指向任何真实的东西。最糟糕的是,上面的检查会通过,如果碰巧指针中的地址是您可以合法访问的内存,则会导致更严重的问题。在某些嵌入式环境中,您可能能够访问内存的任何部分,因此您可能会意外损坏内存的随机部分或执行代码的随机部分。

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

代码中未初始化的指针 的相关文章

  • 无法使用已与其底层 RCW 分离的 COM 对象。在 oledb 中

    我收到此错误 但我不知道我做错了什么 下面的代码在backrgroundworker中 将异常详细信息复制到剪贴板 System Runtime InteropServices InvalidComObjectException 未处理 通
  • 访问私人成员[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 通过将类的私有成员转换为 void 指针 然后转换为结构来访问类的私有成员是否合适 我认为我无权修改包含我需要访问的数据成员的类 如果不道德 我
  • ASP.NET Core Serilog 未将属性推送到其自定义列

    我有这个设置appsettings json对于我的 Serilog 安装 Serilog MinimumLevel Information Enrich LogUserName Override Microsoft Critical Wr
  • Qt-Qlist 检查包含自定义类

    有没有办法覆盖加载自定义类的 Qt QList 的比较机制 即在 java 中你只需要重写一个比较方法 我有一个带有我的自定义类模型的 QList QList
  • 指针问题(仅在发布版本中)

    不确定如何描述这一点 但我在这里 由于某种原因 当尝试创建我的游戏的发布版本进行测试时 它的敌人创建方面不起作用 Enemies e level1 3 e level1 0 Enemies sdlLib 500 2 3 128 250 32
  • 获取没有非标准端口的原始 url (C#)

    第一个问题 环境 MVC C AppHarbor Problem 我正在调用 openid 提供商 并根据域生成绝对回调 url 在我的本地机器上 如果我点击的话 效果很好http localhost 12345 login Request
  • C#:如何防止主窗体过早显示

    在我的 main 方法中 我像往常一样启动主窗体 Application EnableVisualStyles Application SetCompatibleTextRenderingDefault false Application
  • C 预处理器库

    我的任务是开发源分析工具C程序 并且我需要在分析本身之前预处理代码 我想知道什么是最好的图书馆 我需要一些重量轻 便于携带的东西 与其推出自己的 为什么不使用cpp这是的一部分gcc suite http gcc gnu org onlin
  • Web API - 访问 DbContext 类中的 HttpContext

    在我的 C Web API 应用程序中 我添加了CreatedDate and CreatedBy所有表中的列 现在 每当在任何表中添加新记录时 我想填充这些列 为此目的我已经覆盖SaveChanges and SaveChangesAsy
  • C# 中的递归自定义配置

    我正在尝试创建一个遵循以下递归结构的自定义配置部分
  • 在数据库中搜索时忽略空文本框

    此代码能够搜索数据并将其加载到DataGridView基于搜索表单文本框中提供的值 如果我将任何文本框留空 则不会有搜索结果 因为 SQL 查询是用 AND 组合的 如何在搜索 从 SQL 查询或 C 代码 时忽略空文本框 private
  • 如何衡量两个字符串之间的相似度? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 给定两个字符串text1 and text2 public SOMEUSABLERETURNTYPE Compare string t
  • C++ fmt 库,仅使用格式说明符格式化单个参数

    使用 C fmt 库 并给定一个裸格式说明符 有没有办法使用它来格式化单个参数 example std string str magic format 2f 1 23 current method template
  • 在 Dynamics CRM 插件中访问电子邮件发件人地址

    我正在编写一个 Dynamics CRM 2011 插件 该插件挂钩到电子邮件实体的更新后事件 阶段 40 pipeline http msdn microsoft com en us library gg327941 aspx 并且在此阶
  • C - 直接从键盘缓冲区读取

    这是C语言中的一个问题 如何直接读取键盘缓冲区中的数据 我想直接访问数据并将其存储在变量中 变量应该是什么数据类型 我需要它用于我们研究所目前正在开发的操作系统 它被称为 ICS OS 我不太清楚具体细节 它在 x86 32 位机器上运行
  • 为什么我收到“找不到编译动态表达式所需的一种或多种类型。”?

    我有一个已更新的项目 NET 3 5 MVC v2 到 NET 4 0 MVC v3 当我尝试使用或设置时编译出现错误 ViewBag Title财产 找不到编译动态表达式所需的一种或多种类型 您是否缺少对 Microsoft CSharp
  • Process.Start 阻塞

    我正在调用 Process Start 但它会阻止当前线程 pInfo new ProcessStartInfo C Windows notepad exe Start process mProcess new Process mProce
  • const、span 和迭代器的问题

    我尝试编写一个按索引迭代容器的迭代器 AIt and a const It两者都允许更改容器的内容 AConst it and a const Const it两者都禁止更改容器的内容 之后 我尝试写一个span
  • 使用 libcurl 检查 SFTP 站点上是否存在文件

    我使用 C 和 libcurl 进行 SFTP FTPS 传输 在上传文件之前 我需要检查文件是否存在而不实际下载它 如果该文件不存在 我会遇到以下问题 set up curlhandle for the public private ke
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow

随机推荐

  • 使用 LUKS 收到“此密码无可用密钥”

    我的笔记本电脑有一个加密磁盘 经过一个apt upgrade几个小时后 强制关闭我的密码不再解密我的磁盘 我从 Debian Live USB 棒启动并尝试了几件事 Can I decrypt the partition with my p
  • Laravel 需要使用 Carbon 类仅显示日期而不是时间

    目前 我正在使用 碳 现在 它显示日期和时间 2015 03 10 23 23 46 但我只需要一个约会 2015 03 10 http carbon nesbot com docs api formatting http carbon n
  • 元素' aria-label='将 'tools:replace="Android:value"' 添加到 AndroidManifest 的 元素'> 将 'tools:replace="Android:value"' 添加到 AndroidManifest 的 元素

    我正在遵循 HeadFirst Android 开发教程 并在添加后遇到问题 私人 ActionBarDrawerToggle 抽屉切换 该控件已被弃用 因此我按照 Stack 上的说明通过将 com android support app
  • MySql 查询:包含 COUNT(id) == 0 的天数,但仅在过去 30 天内

    我正在执行一个查询 以获取过去 30 天内每天从数据库中生成的数量 但也需要标记没有构建的日子 在我的 WHERE 子句中 我使用 Submittime 来确定是否有构建 如何修改它以包含 COUNT id 0 但仅在过去 30 天内的日期
  • CORS 不适用于 Chrome

    我已经在服务器上设置了跨源资源共享 使用 CrossOriginFilter 的 Jetty 它在 IE8 和 Firefox 上完美运行 在 Chrome 上 它只是 没有 ajax url crossOriginURL type GET
  • Pandas 计算机每小时平均值并设置在间隔中间

    我想计算风速和风向时间序列的每小时平均值 但我想将时间设置为半小时 因此 14 00 到 15 00 之间的值的平均值将为 14 30 现在 我似乎只能在间隔的左侧或右侧得到它 这是我目前拥有的 ts g item replace seco
  • 无法下载eclipse插件

    我正在尝试下载 eclipse 的 kotlin 插件 我能够连接到 eclipse 市场 但是当我尝试下载它时 出现错误 Unable to read repository at https dl bintray com jetbrain
  • 对 Pandas 数据框中的行对应用函数

    我是 pandas dataframe 的新手 我想应用一个在同一列中获取几行的函数 就像当您应用函数 diff 时一样 但我想计算文本之间的距离 所以我定义了一个测量距离的函数 我尝试使用 apply 但我不知道如何选择几行 下面我展示了
  • 石墨总结数据点

    我在用着graphite http graphite wikidot com 收集数据 我想检索一段时间内某些事件的总数 比如说 每周的登录次数 但是 我只需要总数 不需要查看它如何随时间变化 当我使用类似的东西时from 1w targe
  • Symfony 5 Api 测试 createClient() LogicalException

    正如标题所示 我正在使用 Symfony 5 构建一个 API 我有一些控制器需要不同的用户权限 我想测试它们 所以我决定创建两个具有不同角色的用户用于测试目的 ROLE USER and ROLE ADMIN 当前的代码是这样的 注意 这
  • MySql:显示列但排除除字段名称之外的所有内容

    我想将表的字段名称从 MySql 提取到 python 中 我知道 show columns from project 将工作 我读到您可以添加 WHERE 以将其限制为某些字段 但我找不到如何仅返回列名而不返回类型 键 空 额外信息的示例
  • Rails.cache.clear 和 rake tmp:cache:clear 有什么区别?

    这两个命令等效吗 如果不是 有什么区别 rake 任务仅清除存储在文件系统中的文件 Rails root tmp cache 这是该任务的代码 namespace cache do desc Clears all files and dir
  • 需要了解SemaphoreSlim的用法

    这是我的代码 但我不明白是什么SemaphoreSlim是在做 async Task WorkerMainAsync SemaphoreSlim ss new SemaphoreSlim 10 List
  • ASP.NET / IIS 远程调试 - DEBUG 动词

    我正在寻找有关 DEBUG HTTP 动词的详细信息 我很清楚这是用于远程调试 尽管我什至不确定它是用于 IIS 还是 ASP NET 如果我想直接访问此界面 即不通过 Visual Studio 而是手动发送这些命令 我需要知道什么 它的
  • 我需要为初级程序员进行一些简单的逻辑/编程练习[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我目前正在教授员工 ECMA 脚本 因为维护我们使用的工作流程系统需要它 并且我需要一些挑战来用作练习 我们已经涵盖了大部分语言 他现在非
  • 为遗留库创建代码契约

    最终目标是为驻留在我无法控制的外部程序集中的类指定契约 即我不能直接向该类添加契约 到目前为止我已经尝试过 ContractClassFor属性 不起作用 因为目标类必须指向合约类 通过对自动生成的程序集进行逆向工程 手动构建合同引用程序集
  • Bingpreview 使电子邮件中的一次性链接失效

    Outlook com 似乎使用必应预览 https www bing com webmaster help which crawlers does bing use 8c184ec0爬虫来爬行电子邮件中的链接 但在打开电子邮件后 用户有机
  • GCC 选项强制执行 Ansi C 标准检查?

    我应该使用哪些 gcc 选项来强制执行 ANSI C C99 警告 错误 gcc GCC 3 4 2 mingw 特殊 我在用着 gcc 学究式 ansi std c99 它是否正确 The ansi标志是同义词 std c89 flag
  • CakePHP 2.1.0:如何创建“停机维护”页面

    我正在尝试实现类似的东西马克 斯托里的 停机维护 页面 http mark story com posts view quick and dirty down for maintenance page with cakephp使用 Cake
  • 代码中未初始化的指针

    我正在学习 C 我发现指针如果未初始化可能会指向内存中的随机位置 并产生内存可能被其他程序使用的问题 现在 如果是这种情况 我们就不应该在代码的任何部分包含这一行 int ptr 相反 我们应该有类似的东西 int ptr NULL Is