c - 内存未分配指针变量有效。如何?
问题描述
我已经编写了这段代码并预计它会失败,因为我没有为指针变量分配内存。令我惊讶的是,它没有引发任何错误。是什么原因?
如果我只是随机删除第二个 LOC,它会引发分段错误。如何解释这种看似奇怪的行为?
uint16_t *c;
uint8_t *d;
*c = 1;
printf("%x:%x",c,*c);
解决方案
正如其他人指出的那样,它是UB。在不引起段错误或类似情况的意义上,您对代码“工作”的观察或多或少是随机的。您在堆栈上分配的另一个变量可能会改变您的 c 指针的分配位置,因此它可以具有不同的(随机)位置。(或者,换句话说,它的初始随机值将或可能不同)。
程序的可观察到的不同行为取决于函数中分配的位置和(独立)对象,这完全表明函数中的内存分配存在问题。
推荐阅读
- python - 在 subprocess.call(cmd, ...) 中运行 python 得到错误消息 /bin/sh: -c: line 0: syntax error near unexpected token `('
- c# - In C# 7, How Can I Make a New ValueTuple from an Existing and New Elements?
- c++ - 我想在调试核心文件时恢复 GDB 中的内存
- segmentation-fault - 在这个问题中如何解决 SIGSEGV ERROR?
- c# - 关于MVVM模式结构的问题
- autohotkey - 从 Gui 按钮发送密钥到特定窗口 - AutoHotkey
- android - 有没有办法在给定条件下初始化具有特定活动的应用程序?
- python - 为时间戳列创建 Bin
- vue.js - 如何影响插槽 vuejs 中的组件?
- python - 自定义 bash 函数不提供 python 多个参数