- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
在 C 中使用 MySQL 时,您可以使用 MySQL API 释放内存,如下所示:
MYSQL* connection = NULL;
connection = mysql_init(NULL);
// Stuff...
mysql_close(connection);
但是 Splint 不知道 mysql_close
实际上是在释放内存,所以我得到这个错误:
Fresh storage connection not released before return
A memory leak has been detected. Storage allocated locally is
not released before the last reference to it is lost. (Use
-mustfreefresh to inhibit warning)
如何告诉 Splint mysql_close
正在释放内存? mysql.h
文件的特殊注解?
编辑:好的,如果可以在头文件中使用,也许可以使用 releases *p
注释。会尝试的。
编辑 2:将 /*@releases *sock@*/
添加到 mysql.h
,但现在出现此错误:
Releases clauses includes *sock of non-dynamically allocated
type MYSQL
A declaration uses an invalid annotation. (Use -annotationerror to inhibit
warning)
这是 mysql_close
的标志:
void STDCALL mysql_close(/*@notnull@*/ MYSQL *sock) /*@releases *sock@*/;
最佳答案
我认为正确的注释应该是:
void STDCALL mysql_close(/*@special@*/ /*@notnull@*/ MYSQL *sock)
/*@releases sock@*/;
您错过的关键是 /*@special@*/
注释,这是“激活”所谓的状态子句所必需的。来自 Splint 的文档,7.4 State Clauses :
The
/*@special@*/
annotation is used to mark a parameter, global variable, or return value that is described using state clauses.
关于mysql - Splint 不知道库函数正在释放内存,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25186861/
在 C 中使用 MySQL 时,您可以使用 MySQL API 释放内存,如下所示: MYSQL* connection = NULL; connection = mysql_init(NULL);
我一直在尝试Splint使用我最近编写的 C 程序并试图理解和删除它给出的警告。一个我理解但无法理解如何删除它的代码来自以下代码片段: static MyType_t *findById(const
使用 C 中的简单链表实现,我如何告诉 Splint 我正在转让 data 的所有权? typedef struct { void* data; /*@null@*/ void* ne
我想使用 Splint 来检测具有相同底层类型的 typedef 之间的隐式转换,例如以下代码: typedef int counter; typedef int delta; static int
我有一个程序可以执行如下操作: #include #include int f(char *result) { if (result != NULL) { *res
我有一个程序使用无符号字符来表示小范围的整数。我发现自己需要在程序的几个不同部分将它们清除为 0,我最近也开始使用夹板,显然: unsigned char c = 0; 发出警告: Variable
Splint很好地追踪 C 代码中的内存泄漏。每个malloc() 都应该有一个匹配的free()。但 BoehmGC 收集的代码使用 GC_MALLOC() 且没有匹配的 GC_FREE()。这使得
我正在尝试让 splint 与我正在处理的嵌入式项目一起工作。我想知道是否有一个示例 .splintrc 选项文件,我可以向其中添加自己的选项/配置以简化整个过程。我正在使用 IAR 工作台编译和构建
根据Splint FAQ : For Win32, Splint looks for splint.rc instead of .splintrc due to the DOS filename li
以下代码编译和执行时没有任何警告或错误。但是,当我使用 splint分析代码,它显示了 4 个警告(显示在代码下方)。 我见过的大多数示例(带有此类警告)都使用 malloc 和 free。由于此代码
我正在使用嵌入式系统 XC8 C 编译器(用于 PIC 微处理器)。允许以下内容: bit foo(){ //... } 但作为非标准 C,Splint 静态分析器给出以下错误: Parse
我在 Splint 文档中搜索了“fresh storage”,发现有提及,但没有正式定义。其他修饰符,如 null 或 only,我理解并正在使用。我只是不确定新鲜存储是什么。 情况是这样的: vo
对于以下程序: int main(void) { int value = 2; int result = value >> 1U; return result; } ...Sp
我编译(没有警告)来自“The Linux Kernel Module Programming Guide”的hello-5.c 示例,当我尝试对其进行 insmod 时,我收到以下错误: insmo
我有一些 C 代码,其中包含专有遗留应用程序的 header 。我无法修改标题。我收到以下代码的夹板解析错误: #if defined(HAS_LONGLONG) /* removed for
我正在尝试使用 Splint使用 MySQL C API 并遇到了一些与释放内存相关的其他问题。在我能找到的有关使用 C API 的所有示例中,唯一调用的释放函数是 mysql_free_result
两者都是数学值,但 float 确实更精确。这是错误的唯一原因 - 精度差异吗?还是存在其他潜在(且更严重)的问题? 最佳答案 这是因为整数值集不等于“int”和“float”类型的浮点值集。例如,浮
我是一名优秀的程序员,十分优秀!