代码中未初始化的指针

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(使用前将#替换为@)

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

  • 如何将 std::string& 转换为 C# 引用字符串

    我正在尝试将 C 函数转换为std string参考C 我的 API 如下所示 void GetStringDemo std string str 理想情况下 我希望在 C 中看到类似的东西 void GetStringDemoWrap r
  • 在模板类中声明模板友元类时出现编译器错误

    我一直在尝试实现我自己的链表类以用于教学目的 我在迭代器声明中指定了 List 类作为友元 但它似乎无法编译 这些是我使用过的 3 个类的接口 Node h define null Node
  • 在 xaml 中编写嵌套类型时出现设计时错误

    我创建了一个用户控件 它接受枚举类型并将该枚举的值分配给该用户控件中的 ComboBox 控件 很简单 我在数据模板中使用此用户控件 当出现嵌套类型时 问题就来了 我使用这个符号来指定 EnumType x Type myNamespace
  • std::list 线程push_back、front、pop_front

    std list 线程安全吗 我假设不是这样 所以我添加了自己的同步机制 我认为我有正确的术语 但我仍然遇到问题 每个函数都由单独的线程调用 Thread1 不能等待 它必须尽可能快 std list
  • 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
  • -webkit-box-shadow 与 QtWebKit 模糊?

    当时有什么方法可以实现 webkit box shadow 的工作模糊吗 看完这篇评论错误报告 https bugs webkit org show bug cgi id 23291 我认识到这仍然是一个问题 尽管错误报告被标记为RESOL
  • 无限循环与无限递归。两者都是未定义的吗?

    无副作用的无限循环是未定义的行为 看here https coliru stacked crooked com view id 24e0a58778f67cd4举个例子参考参数 https en cppreference com w cpp
  • 方程“a + bx = c + dy”的积分解

    在等式中a bx c dy 所有变量都是整数 a b c and d是已知的 我如何找到整体解决方案x and y 如果我的想法是正确的 将会有无限多个解 由最小公倍数分隔b and d 但我只需要一个解决方案 我可以计算其余的 这是一个例
  • 两个静态变量同名(两个不同的文件),并在任何其他文件中 extern 其中一个

    在一个文件中将变量声明为 static 并在另一个文件中进行 extern 声明 我认为这会在链接时出现错误 因为 extern 变量不会在任何对象中看到 因为在其他文件中声明的变量带有限定符 static 但不知何故 链接器 瑞萨 没有显
  • 为什么 C# 2.0 之后没有 ISO 或 ECMA 标准化?

    我已经开始学习 C 并正在寻找标准规范 但发现大于 2 0 的 C 版本并未由 ISO 或 ECMA 标准化 或者是我从 Wikipedia 收集到的 这有什么原因吗 因为编写 审查 验证 发布 处理反馈 修订 重新发布等复杂的规范文档需要
  • C 编程:带有数组的函数

    我正在尝试编写一个函数 该函数查找行为 4 列为 4 的二维数组中的最大值 其中二维数组填充有用户输入 我知道我的主要错误是函数中的数组 但我不确定它是什么 如果有人能够找到我出错的地方而不是编写新代码 我将不胜感激 除非我刚去南方 我的尝
  • 如何在 Linq to SQL 中使用distinct 和 group by

    我正在尝试将以下 sql 转换为 Linq 2 SQL select groupId count distinct userId from processroundissueinstance group by groupId 这是我的代码
  • 为什么C++代码执行速度比java慢?

    我最近用 Java 编写了一个计算密集型算法 然后将其翻译为 C 令我惊讶的是 C 的执行速度要慢得多 我现在已经编写了一个更短的 Java 测试程序和一个相应的 C 程序 见下文 我的原始代码具有大量数组访问功能 测试代码也是如此 C 的
  • 当文件流没有新数据时如何防止fgets阻塞

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

    我偶尔会在 StackOverflow 上看到代码 询问一些涉及函数的重载歧义 例如 void foo int param 我的问题是 为什么会出现这种情况 或者更确切地说 你什么时候会有 对参考的参考 这与普通的旧参考有何不同 我从未在现
  • MySQL Connector C/C API - 使用特殊字符进行查询

    我是一个 C 程序 我有一个接受域名参数的函数 void db domains query char name 使用 mysql query 我测试数据库中是否存在域名 如果不是这种情况 我插入新域名 char query 400 spri
  • 指针和内存范围

    我已经用 C 语言编程有一段时间了 但对 C 语言还是很陌生 有时我对 C 处理内存的方式感到困惑 考虑以下有效的 C 代码片段 const char string void where is this pointer variable l
  • 类型或命名空间“MyNamespace”不存在等

    我有通常的类型或命名空间名称不存在错误 除了我引用了程序集 using 语句没有显示为不正确 并且我引用的类是公共的 事实上 我在不同的解决方案中引用并使用相同的程序集来执行相同的操作 并且效果很好 顺便说一句 这是VS2010 有人有什么
  • Mono 应用程序在非阻塞套接字发送时冻结

    我在 debian 9 上的 mono 下运行一个服务器应用程序 大约有 1000 2000 个客户端连接 并且应用程序经常冻结 CPU 使用率达到 100 我执行 kill QUIT pid 来获取线程堆栈转储 但它总是卡在这个位置
  • 从 mvc 控制器使用 Web api 控制器操作

    我有两个控制器 一个mvc控制器和一个api控制器 它们都在同一个项目中 HomeController Controller DataController ApiController 如果我想从 HomeController 中使用 Dat

随机推荐

  • 使用 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