什么是C中的Singleton指针?

Jay*_*Jay 7 c singleton pointers

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

char *inbuf = NULL;
inbuf = buf; //buf is some other valid buffer of size 100.

func(&inbuf);


.....

void func(char **p)
{
  ...
  (*p)++;
  ...

}
Run Code Online (Sandbox Code Playgroud)

Coverity Tool表示"使用&inbuf获取地址会产生单身人士".我听说过关于C++的单例一词.但是,单例指针在C方面意味着什么呢?

raz*_*ebe 8

单个指针在C方面意味着什么?

在这种情况下,我认为Coverity指的是char*数组与char*通过获取该数组地址创建的单个指针之间的区别.

Coverity公司警告您通过传递的第一个元素的地址buffunc,你使之更难以为自己安全写入到阵列,因为你不能轻易确定其大小.

在没有看到所有代码的情况下很难确定,但假设buf您已经在顶层函数中声明了一个数组,那么使用该函数中的sizeof运算符buf将产生数组的大小.

但是,当您将该地址传递buffunc该行时

func(&inbuf); 
Run Code Online (Sandbox Code Playgroud)

... func仅接收指向该数组的第一个元素的指针.从func你不能再sizeof用来确定数组的大小 - 它只会返回指针的大小 - 所以如果没有对数组包含多少空间的隐含理解,你就无法安全地写入指针.

这使得代码易碎,因此实践很差.

(这些都与Singleton模式无关)