什么';C语言中的单例指针是什么?

什么';C语言中的单例指针是什么?,c,pointers,singleton,C,Pointers,Singleton,我有一些这样的代码(这不是生产代码,只是一个示例代码) Coverity Tool说“使用&inbuf获取地址会产生一个单身汉”。我已经听说过关于C++的独生名词。但是,单例指针对于C意味着什么 单例指针在C语言中是什么意思 在本例中,我认为Coverity是指char*数组和通过获取该数组的地址创建的单个char*指针之间的差异。 Coverity警告您,通过将buf的第一个元素的地址传递给func,您将更加难以安全地写入该数组,因为您无法轻松确定其大小 如果看不到所有代码,就很难确定,但是假

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

Coverity Tool说“使用&inbuf获取地址会产生一个单身汉”。我已经听说过关于C++的独生名词。但是,单例指针对于C意味着什么

单例指针在C语言中是什么意思

在本例中,我认为Coverity是指char*数组和通过获取该数组的地址创建的单个
char*
指针之间的差异。

Coverity警告您,通过将
buf
的第一个元素的地址传递给
func
,您将更加难以安全地写入该数组,因为您无法轻松确定其大小

如果看不到所有代码,就很难确定,但是假设
buf
是您在顶级函数中声明的数组,那么在
buf
函数中使用
sizeof
操作符将得到数组的大小

但是,当您将
buf
的地址传递到第行的
func

func(&inbuf); 
func
仅接收指向该数组第一个元素的指针。从
func
中,您不能再使用
sizeof
来确定数组的大小,因此,如果不了解数组包含的空间大小,就无法安全地写入该指针

这导致了脆弱的代码,因此是糟糕的做法


(所有这些都与此无关)

覆盖率分析表明存在以下模式的缺陷:

typeA var;        // declare a variable to some type
func(&var)        // call a function passing the address of var

func(typeA *var) {
      ...
      var++;      // inside the function do pointer arithmetic on var

这通常是一种错误模式,因为函数需要一个指向缓冲区的指针,但您正在向它传递一个指向单例值的指针。C/C++中的类型系统不区分“指向一个对象的指针”和“指向对象数组的指针”。

单个对象就像一个全局对象,只能创建一次,任何时候都可以访问。检查此项了解更多信息:向我们显示声明buf的行。不应该是第一行:“typeA var[x];//声明某种类型的数组变量”?不,关键是它是一个bug,因为您将传递指向单例对象的指针,而不是数组。
typeA var;        // declare a variable to some type
func(&var)        // call a function passing the address of var

func(typeA *var) {
      ...
      var++;      // inside the function do pointer arithmetic on var