gpt4 book ai didi

c++ - 测试指针的有效性 (C/C++)

转载 作者:太空狗 更新时间:2023-10-29 16:56:52 24 4
gpt4 key购买 nike

有什么方法可以确定(当然是通过编程)给定的指针是否“有效”?检查 NULL 很容易,但是像 0x00001234 这样的东西呢?尝试取消引用此类指针时会发生异常/崩溃。

首选跨平台方法,但特定平台(适用于 Windows 和 Linux)也可以。

澄清更新:问题不在于陈旧/释放/未初始化的指针;相反,我正在实现一个 API,它从调用者那里获取指针(比如指向字符串、文件句柄等的指针)。调用者可以(有意或无意)发送一个无效值作为指针。如何防止崩溃?

最佳答案

Update for clarification: The problem is not with stale, freed or uninitialized pointers; instead, I'm implementing an API that takes pointers from the caller (like a pointer to a string, a file handle, etc.). The caller can send (in purpose or by mistake) an invalid value as the pointer. How do I prevent a crash?

你不能做那个检查。您根本无法检查指针是否“有效”。您必须相信,当人们使用带指针的函数时,这些人知道他们在做什么。如果他们将 0x4211 作为指针值传递给您,那么您必须相信它指向地址 0x4211。如果它们“不小心”击中了一个对象,那么即使您使用一些可怕的操作系统函数(IsValidPtr 或其他),您仍然会陷入错误并且不会很快失败。

开始使用空指针来发出这种信号,并告诉你的库的用户,如果他们倾向于不小心传递无效指针,他们不应该使用指针,严重的:)

关于c++ - 测试指针的有效性 (C/C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39326146/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com