我有一些一般性问题。
是否存在作用域涵盖整个程序的指针?
是否有程序具有用于访问和操作越界内容的越界指针?有什么例子吗?
边界检查是否可以应用于所有指针作用域,而不会导致误报或程序停止?边界检查有哪些缺点?是否有一些程序无法应用?
最佳答案
就其作用域而言,指针与其他类型的变量没有区别:全局变量的作用域是从声明它们的地方到编译单元结束为止(除非它们被局部变量覆盖)相同的名称)。
因此,如果您将指针存储在具有唯一名称并在编译单元开头声明的全局变量中,则它将在整个编译单元的范围内。
是的,有缺陷的程序。此类程序的一个示例如下:
int main(void) { int arr[] = {1,2,3}; arr[23] = 42; return 0; }
是的,给定的编译器 + libc 组合可以在运行时对所有指针的使用执行绑定(bind)检查,并且此类检查不会产生误报。缺点是跟踪必要的元数据和实际应用检查的性能成本。它们可以应用于每个程序,但如果程序有严格的性能要求,则可能不再满足检查的要求。
关于c - 关于 C 指针范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22844488/