Co oznacza wskaźnik singletowy pod względem C?
W tym przypadku myślę Coverity odnosi się do różnicy między tablicą char * i wskaźnik do pojedynczego char*
utworzonego poprzez adres tej tablicy.
Coverity ostrzega, że przekazując adres pierwszego elementu buf
do func
, robisz to trudniejsze dla siebie, aby bezpiecznie pisać na tej tablicy, ponieważ nie można łatwo określić jej rozmiar.
Trudno mieć pewność, nie widząc wszystkich kodzie, ale zakładając buf
jest tablicą już ogłoszony gdzieś w funkcji najwyższego poziomu, a następnie przy użyciu operatora sizeof
na buf
z tej funkcji przyniesie rozmiar tablicy .
Jednak kiedy przechodzą adres buf
do func
na linii
func(&inbuf);
... func
jedynie odbiera wskaźnik do pierwszego elementu tej tablicy. Od func
nie można już używać sizeof
do określenia rozmiaru tablicy - it will just return the size of the pointer - i dlatego nie można bezpiecznie pisać do tego wskaźnika bez pewnego domyślnego zrozumienia, ile miejsca zawiera tablica.
To powoduje, że kod jest niestabilny i dlatego jest kiepską praktyką.
(Nic z tego nie ma nic wspólnego z Singleton Pattern)
Singleton jest podobny do globalnego, który zostanie utworzony tylko raz i będzie dostępny za każdym razem. Sprawdź to dla więcej: http://www.infernodevelopment.com/singleton-c – NKamrath
pokaż nam linię, która deklaruje buf. –