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