c - 关于 C 指针范围

标签 c pointers scope bounds

我有一些一般性问题。

  1. 是否存在作用域涵盖整个程序的指针?

  2. 是否有程序具有用于访问和操作越界内容的越界指针?有什么例子吗?

  3. 边界检查是否可以应用于所有指针作用域,而不会导致误报或程序停止?边界检查有哪些缺点?是否有一些程序无法应用?

最佳答案

  1. 就其作用域而言,指针与其他类型的变量没有区别:全局变量的作用域是从声明它们的地方到编译单元结束为止(除非它们被局部变量覆盖)相同的名称)。

    因此,如果您将指针存储在具有唯一名称并在编译单元开头声明的全局变量中,则它将在整个编译单元的范围内。

  2. 是的,有缺陷的程序。此类程序的一个示例如下:

    int main(void) {
        int arr[] = {1,2,3};
        arr[23] = 42;
        return 0;
    }
    
  3. 是的,给定的编译器 + libc 组合可以在运行时对所有指针的使用执行绑定(bind)检查,并且此类检查不会产生误报。缺点是跟踪必要的元数据和实际应用检查的性能成本。它们可以应用于每个程序,但如果程序有严格的性能要求,则可能不再满足检查的要求。

关于c - 关于 C 指针范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22844488/

相关文章:

c++ - 如何编译#includes C++代码的C代码?

iphone - 代码或编译器 : optimizing a IIR filter in C for the iPhone 4 and later

c - 为什么输出是 2,0 而不是 2,3?

C: 运算符 -> 和 *

javascript - JavaScript 中的变量引用。通过函数引用全局变量并对其进行操作

c - 在 C 中使用套接字的段错误的未知原因

c - 从fgets()输入中删除结尾的换行符

c - txt 文件中的第一个字符在 C 中不打印

python - 为什么内部函数不能在python的外部范围内获取变量

java - Arraylist 在不应该的时候得到排序?