C 如何检查指针是否重叠?

C 如何检查指针是否重叠?,c,pointers,C,Pointers,我在这里读到了一个提示: 说: 如果指针不指向同一内存位置范围,还应监视指针是否重叠 这样的事情怎么能监控呢?将每个指针相互比较显然是愚蠢的。你不能,也不应该经常这样做。这可能只是作者曾经遇到的一些问题的调试提示,可能在嵌入式系统中很有用 一般来说,valgrind在指针出现问题时比任何手动比较更能帮助您。这是检查重叠的方法: T *a, *b; // ... if (abs((int)((void*)a - (void*)b)) < sizeof(T)) // overlap

我在这里读到了一个提示:

说:

如果指针不指向同一内存位置范围,还应监视指针是否重叠


这样的事情怎么能监控呢?将每个指针相互比较显然是愚蠢的。

你不能,也不应该经常这样做。这可能只是作者曾经遇到的一些问题的调试提示,可能在嵌入式系统中很有用


一般来说,
valgrind
在指针出现问题时比任何手动比较更能帮助您。

这是检查重叠的方法:

T *a, *b;
// ...
if (abs((int)((void*)a - (void*)b)) < sizeof(T))
    // overlap
T*a、*b;
// ...
如果(abs((int)((void*)a-(void*)b))

但是我看不出有什么理由去检查它。

那些提示完全没有用。部分原因是,例如,你提到的那一条没有上下文就毫无意义。这3条“提示”大多是胡说八道。你不监控这样的事情,你只是确保它永远不会发生。例如,strcpy()中的src和dst不要使用相同的内存区域。例如,请参阅Adobe Flash的此错误报告,这是由于调用
memcpy
时src和dest重叠造成的:根据标准,您不能减去
void
指针。强制转换为
int
也不正确,将导致64位系统上的截断。改为使用
ptrdiff\u t
。“…我看不出有任何理由检查它”-
memcpy
使用
限制
指针。在调试构建中,最好有额外的诊断功能,以便在调试周期内,在将PNG缓冲区投入生产之前,可以解决缓冲区重叠的问题。实际上,我为嵌入式系统(无操作系统)编程,我可以在那里使用valgrind吗(据我所知,这是一些unix问题)?