c - 什么是 C 中的单例指针?

标签 c pointers singleton

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

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 - C中的字符串链表

c - berkeley db 保存到磁盘

c - 与 GCC 的关联数学

创建一个用户空间指针来保存回文并将该指针传递给 copy_from_user(void *to, const void __user *mypointer, unsigned long count)

java - 测试线程安全单例的代码中的奇怪行为

java - 单例和静态工厂方法有什么区别

.net - Context.Current 模式的缺点?

c - 为什么在 o/p 中 i 的值不同

python - Cython 中的矢量分配

c - 从指向字符串的指针数组访问字符串的字符