【发布时间】:2009-01-24 07:23:42
【问题描述】:
我编写了一个 API,它需要初始化一个上下文,然后将其传递给每个 API 调用。调用者为上下文分配内存,然后将其与其他参数一起传递给 init 函数,这些参数描述了他们希望以后的 API 调用如何表现。上下文是不透明的,所以客户不能在那里乱七八糟;它仅用于 API 函数的内部使用。
我遇到的问题是调用者正在分配上下文,但没有初始化它。因此,后续的 API 函数将无意义的垃圾当作真实的上下文来引用。
我正在寻找一种方法来验证传递给 API 函数的上下文是否已实际初始化。我不确定这是否可能。我想到的两个想法是:
- 使用预定义常量并将其存储在上下文的“魔术”字段中,以便在 API 调用时进行验证。
- 使用上下文内容的校验和,将其存储在“魔术”字段中并在调用时对其进行验证。
不幸的是,我知道这些选项中的任何一个都可能导致误报验证,要么是因为内存中的随机垃圾与“神奇”数字匹配,要么是因为上下文恰好与先前初始化的上下文占用相同的空间。我认为后一种情况的可能性更大。
这是否简单地归结为概率问题?在大多数情况下我可以避免误报,但不是全部?是否值得使用一个仅仅给我一个合理的准确概率的系统,或者这只会让调试其他问题变得更加困难?
【问题讨论】:
标签: c memory-management