我试图使用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不会抱怨。这是我唯一的解决方案吗?
答案 0 :(得分: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 */