- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一些这样的代码(这不是生产代码。只是示例代码)
char *inbuf = NULL;
inbuf = buf; //buf is some other valid buffer of size 100.
func(&inbuf);
.....
void func(char **p)
{
...
(*p)++;
...
}
Coverity 工具说“使用 &inbuf 获取地址会产生一个单例”。我听说过关于 C++ 的单例这个词。但是,单例指针在 C 语言中意味着什么?
最佳答案
What does a singleton pointer mean in terms of C?
在这种情况下,我认为 Coverity 指的是 char* 数组和指向通过获取该数组的地址创建的单个 char*
的指针之间的区别。
Coverity 警告您,通过将 buf
的第一个元素的地址传递给 func
,您将让自己更难安全地写入该数组因为您无法轻易确定它的大小。
如果不查看所有代码就很难确定,但假设 buf
是一个数组,您已在顶级函数的某处声明然后使用 sizeof
来自该函数的 buf
运算符将产生数组的大小。
但是,当你在行中将 buf
的地址传递给 func
时
func(&inbuf);
...func
仅接收指向该数组第一个元素的指针。在 func
中,您不能再使用 sizeof
来确定数组的大小 - it will just return the size of the pointer - 因此,如果不隐含地了解数组包含多少空间,就无法安全地写入该指针。
这会导致代码脆弱,因此是一种糟糕的做法。
(这些都与 Singleton Pattern 无关)
关于c - 什么是 C 中的单例指针?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10934844/
我最近购买了《C 编程语言》并尝试了 Ex 1-8这是代码 #include #include #include /* * */ int main() { int nl,nt,nb;
早上好!我有一个变量“var”,可能为 0。我检查该变量是否为空,如果不是,我将该变量保存在 php session 中,然后调用另一个页面。在这个新页面中,我检查我创建的 session 是否为空,
我正在努力完成 Learn Python the Hard Way ex.25,但我无法理解某些事情。这是脚本: def break_words(stuff): """this functio
我是一名优秀的程序员,十分优秀!