【问题标题】:Does the pointer get from sqlite3_column_blob() method need to be delete?从 sqlite3_column_blob() 方法获取的指针是否需要删除?
【发布时间】:2010-09-24 10:05:14
【问题描述】:

像这样: const void * test = sqlite3_column_blob(stat, 1); 我可以删除或删除[]测试吗?

【问题讨论】:

    标签: c sqlite


    【解决方案1】:

    查看其 API 手册。如果它是 C API,您可能必须 free 它。如果它没有像 sqlite3_free 那样提供自己的函数(例如 pcre 这样做),则必须使用该函数。

    你不能做的是使用 C++ 的删除操作符删除它,因为你有一个 void 指针。您不能删除 void 指针,因为编译器必须知道它的类型。 (并且 void 是一个不完整的类型。你也不能删除不完整的类型)。

    【讨论】:

      【解决方案2】:

      来自sqllite documentation

      在发生类型转换或调用 sqlite3_step() 或 sqlite3_reset() 或 sqlite3_finalize() 之前,返回的指针都是有效的。用于保存字符串和 BLOB 的内存空间会自动释放。 不要将 sqlite3_column_blob() 返回的指针传递给 sqlite3_free()。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-04-06
        • 1970-01-01
        • 2020-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多