c - cyclone 是否对胖指针执行静态或动态检查?

标签 c static-analysis bounds-checker

我正在努力通过 Cyclone: A Safe Dialect of C对于 PL 类。该论文的作者解释说,他们添加了一个特殊的“胖”指针来存储边界信息以防止缓冲区溢出。但是他们没有指定对该指针的检查是静态的还是动态的。他们给出的例子似乎暗示程序员必须记住检查数组的大小,以检查它们是否不超过缓冲区。这似乎打开了编程错误的可能性,就像在 C 中一样。我认为 Cyclone 的整个想法是让这样的错误成为不可能。语言有检查吗?它只会让编程错误变得更难吗?

int strlen(const char ?s) {
    int i, n;
    if (!s) return 0;
    n = s.size; //what if the programmer forgets to do this.. or accidentally adds an n++;
    for (i = 0; i < n; i++,s++)
         if (!*s) return i;
    return n;
}

最佳答案

"Fat" pointers support pointer arithmetic with run-time bounds checking.

获取自Wikipedia通过谷歌搜索“胖指针”。

关于c - cyclone 是否对胖指针执行静态或动态检查?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13558189/

相关文章:

java - Fortify Source Analyzer 和 Apache Lenya

vb.net - VB.NET 有哪些 StyleCop 之类的工具

c++ - 任何程序都会检测到 C/C++ 结构中的缓冲区溢出吗?

memory - 具有用于边界检查的固定模式的内存区域的技术名称?

python - SWIG 包装 C 库引发异常的最优雅方式

c - 输出 C 端错误

c++ - 使 SASL(带有 GSSAPI)启用客户端和服务器并使用 LDAP+kerberos 作为身份验证器? (SSO 系统上的单点登录)

C-内存泄漏,为什么?

c++ - 为什么在调用 AfxWinInit 时收到警告 C6309?

c++ - 如何使 std::vector 的 operator[] 编译在 DEBUG 中而不是在 RELEASE 中进行边界检查