小编mks*_*eve的帖子

以下代码可以用于指向不同事物的指针

我有一段记忆,我正在"守卫",定义为

typedef unsigned char byte;

byte * guardArea;
size_t guardSize;

byte * guardArea = getGuardArea();
size_t guardSize = getGuardSize();
Run Code Online (Sandbox Code Playgroud)

为此目的可接受的实现是:

size_t glGuardSize = 1024; /* protect an area of 1kb */
byte * getGuardArea()
{
     return malloc( glGuardSize );
}
size_t getGuardSize()
{
     return glGuardSize;
}
Run Code Online (Sandbox Code Playgroud)

以下代码段可以为任何指针(来自不同的malloc,来自堆栈等)返回true吗?

if ( ptr >= guardArea && ptr < (guardArea + guardSize)) {
     return true;
}
Run Code Online (Sandbox Code Playgroud)

该标准规定:

  • 区域内的值将返回true.(当ptr是成员时,所有行为都正确.)

  • 指针将是不同的(a == b只有它们是相同的).

  • 可以通过递增基数来访问字节数组中的所有地址.
  • 任何指针都可以转换为char*,而不会损坏.

所以我无法理解结果对于来自不同对象的任何指针的结果是否正确(因为它会破坏区域内其中一个指针的不同规则).

编辑:

用例是什么?

检测指针是否在区域内的能力非常重要,在某些时候编写代码

if (  isInMyAreaOfInterest( unknownPointer ) ) { …
Run Code Online (Sandbox Code Playgroud)

c pointers language-lawyer

13
推荐指数
1
解决办法
2169
查看次数

标签 统计

c ×1

language-lawyer ×1

pointers ×1