我有一些这样的代码(这不是生产代码)。只是一个示例代码)

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/

10-11 23:03
查看更多