- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
以下情况,我有一个包含指向整数变量的指针的结构,如下所示:
struct Structure[] = {
{ &Var[0], &Var[1] },
{ &Var[2], &Var[3] }
};
事情是:Var
在第一次填充此结构时未初始化。 (如:NULL
)不久之后(第一次传递)变量 Var
将被初始化,并且引用将相应更新。
我认为这没有任何故障的原因,但我希望您能在这方面提供专业知识。将无效内存(带有数组下标)的引用放入这样的数组中是否合法?还是我需要针对这种情况采取不同的方法?
在第一次初始化之前,我不会访问这些变量的内容。
非常感谢。
编辑:为了以后读者的利益: Var
是一个全局指针变量,它在开始时被初始化为 NULL。初始化通过使用 new
将其变成一个数组。
最佳答案
我假设 Var
是一个指针对象,并且它的当前值是一个空指针。您的陈述暗示了这一点:
Var
is uninitialized the first time this struct is filled. (As in:NULL
)
我还假设 Var
没有在 block 范围内定义。如果它是在 block 范围内定义的,并且您没有对其进行初始化或为其分配值,那么它的值就是垃圾,不一定是空指针值,并且任何引用其值的尝试都有未定义的行为。
行为未定义。
如果 Var == NULL
,则 &Var[N]
具有未定义的行为。
arr[index]
根据定义等价于 *(arr + index)
,所以 &Var[N]
等价于 >&(*(Var + N))
.指针算术的行为是根据指针指向的数组对象的元素来定义的(单个对象被视为单元素数组),而空指针不指向任何东西。
题外话:
C 明确表示 &*x
被评估为 x
,而 &[x[i])
被评估为 x+i
; C++ 没有这样说,所以 &
的操作数必须是有效的。 C++ 有一个添加 0
的特殊情况,即使对于空指针也有很好的定义(C 没有这种特殊情况)。但是 &Var[0]
在 C 和 C++ 中仍然无效,但原因不同。在 C 中,它等价于 Var + 0
,但将 0
添加到空指针具有未定义的行为。在 C++ 中,它 not 等价于 Var + 0
;而是等价于 &(*(Var + 0))
; Var + 0
是一个空指针,解引用它有未定义的行为。)
题外话结束。
是的,只是计算一个无效地址具有未定义的行为,即使它从未被取消引用。
这是 2011 ISO C++ 标准 5.7 [expr.add] 第 5 段中的相关文本;特别注意最后:
When an expression that has integral type is added to or subtracted from a pointer, the result has the type of the pointer operand. If the pointer operand points to an element of an array object, and the array is large enough, the result points to an element offset from the original element such that the difference of the subscripts of the resulting and original array elements equals the integral expression. In other words, if the expression P points to the i-th element of an array object, the expressions (P)+N (equivalently, N+(P)) and (P)-N (where N has the value n) point to, respectively, the i + n-th and i − n-th elements of the array object, provided they exist. Moreover, if the expression P points to the last element of an array object, the expression (P)+1 points one past the last element of the array object, and if the expression Q points one past the last element of an array object, the expression (Q)-1 points to the last element of the array object. If both the pointer operand and the result point to elements of the same array object, or one past the last element of the array object, the evaluation shall not produce an overflow; otherwise, the behavior is undefined.
关于c++ - 引用未初始化的内存而不访问它是否合法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18061394/
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 4 年前。 Improv
PowerShell Web Access 允许您通过 Web 浏览器运行 PowerShell cmdlet。它显示了一个基于 Web 的控制台窗口。 有没有办法运行 cmdlet 而无需在控制台窗
我尝试在无需用户登录的情况下访问 Sharepoint 文件。 我可以通过以下任一方式获取访问 token 方法一: var client = new RestClient("https://logi
我目前正在尝试通过 Chrome 扩展程序访问 Google 服务。我的理解是,对于 JS 应用程序,Google 首选的身份验证机制是 OAuth。我的应用目前已成功通过 OAuth 向服务进行身份
假设我有纯抽象类 IHandler 和派生自它的类: class IHandler { public: virtual int process_input(char input) = 0; };
我有一个带有 ThymeLeaf 和 Dojo 的 Spring 应用程序,这给我带来了问题。当我从我的 HTML 文件中引用 CSS 文件时,它们在 Firebug 中显示为中止。但是,当我通过在地
这个问题已经有答案了: JavaScript property access: dot notation vs. brackets? (17 个回答) 已关闭 6 年前。 为什么这不起作用? func
我想将所有流量重定向到 https,只有 robot.txt 应该可以通过 http 访问。 是否可以为 robot.txt 文件创建异常(exception)? 我的 .htaccess 文件: R
我遇到了 LinkedIn OAuth2: "Unable to verify access token" 中描述的相同问题;但是,那里描述的解决方案并不能解决我的问题。 我能够成功请求访问 toke
问题 我有一个暴露给 *:8080 的 Docker 服务容器. 我无法通过 localhost:8080 访问容器. Chrome /curl无限期挂断。 但是如果我使用任何其他本地IP,我就可以访
我正在使用 Google 的 Oauth 2.0 来获取用户的 access_token,但我不知道如何将它与 imaplib 一起使用来访问收件箱。 最佳答案 下面是带有 oauth 2.0 的 I
我正在做 docker 入门指南:https://docs.docker.com/get-started/part3/#recap-and-cheat-sheet-optional docker-co
我正在尝试使用静态 IP 在 AKS 上创建一个 Web 应用程序,自然找到了一个带有 Nginx ingress controller in Azure's documentation 的解决方案。
这是我在名为 foo.js 的文件中的代码。 console.log('module.exports:', module.exports) console.log('module.id:', modu
我试图理解访问键。我读过https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-se
我正在使用 MGTwitterEngine"将 twitter 集成到我的应用程序中。它在 iOS 4.2 上运行良好。当我尝试从任何 iOS 5 设备访问 twitter 时,我遇到了身份验证 to
我试图理解访问键。我读过https://docs.aws.amazon.com/general/latest/gr/aws-sec-cred-types.html#access-keys-and-se
我正在使用以下 API 列出我的 Facebook 好友。 https://graph.facebook.com/me/friends?access_token= ??? 我想知道访问 token 过
401 Unauthorized - Show headers - { "error": { "errors": [ { "domain": "global", "reas
我已经将我的 django 应用程序部署到 heroku 并使用 Amazon s3 存储桶存储静态文件,我发现从 s3 存储桶到 heroku 获取数据没有问题。但是,当我测试查看内容存储位置时,除
我是一名优秀的程序员,十分优秀!