我有一些这样的代码(这不是生产代码)。只是一个示例代码)
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来说意味着什么?
最佳答案
单点指针对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语言中的Singleton指针是什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10934844/