Splint和MySQL:Null存储作为非Null参数传递
我正在尝试将Splint与短CGI脚本一起使用,但出现以下错误:Splint和MySQL:Null存储作为非Null参数传递,mysql,c,splint,Mysql,C,Splint,我正在尝试将Splint与短CGI脚本一起使用,但出现以下错误: Null存储作为非Null参数传递:mysql\u init(Null) mysql_init的定义是:如果参数为NULL,则返回一个新值;如果参数不为NULL,则将结果存储在参数中。然而,如果我尝试 MYSQL* connection; mysql_init(connection); 我会得到: 定义之前使用的变量连接 如何解决这个问题?当然,一种方法是对mysql.h进行注释,这样Splint就不会抱怨了。这是我唯一的解决办
Null存储作为非Null参数传递:mysql\u init(Null)
mysql_init
的定义是:如果参数为NULL
,则返回一个新值;如果参数不为NULL,则将结果存储在参数中。然而,如果我尝试
MYSQL* connection;
mysql_init(connection);
我会得到:
定义之前使用的变量连接
如何解决这个问题?当然,一种方法是对mysql.h进行注释,这样Splint就不会抱怨了。这是我唯一的解决办法吗 您可以编辑
mysql.h
将该参数注释为/*@null@*/
,或者取消该特定代码行的警告:
顺便说一下,注意不要将未初始化的变量传递给函数:
MYSQL* connection; /* this pointer contains garbage at this point */
mysql_init(connection); /* this may get a segmentation fault */
相反,你应该做:
MYSQL* connection = NULL; /* initialize to NULL */
connection = mysql_init(connection); /* get a hold of the new object created */
MYSQL* connection = NULL; /* initialize to NULL */
connection = mysql_init(connection); /* get a hold of the new object created */