0

我正在尝试将 Splint 与简短的 CGI 脚本一起使用,但出现此错误:

Null storage passed as non-null param: mysql_init(NULL)

mysql_init被定义为返回一个新值,如果它的参数是NULL,或者如果不是,则将结果存储在参数中。然而,如果我尝试

MYSQL* connection;
mysql_init(connection);

我会得到:

Variable connection used before definition

如何解决这个问题?一种方法当然是注释mysql.h,这样 Splint 就不会抱怨。是我唯一的解决方案吗?

4

1 回答 1

1

您可以编辑mysql.h以将该参数注释为,或停用该特定代码行/*@null@*/的警告:

/*@-nullpass@*/
connection = mysql_init(NULL);
/*@=nullpass@*/

顺便说一句,注意不要将未初始化的变量传递给函数:

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 */
于 2014-08-07T11:00:37.957 回答