传递给函数调用后的Null指针sqlite3句柄 当我使用C++中的函数来初始化SqLITE3时,当它从函数中出来时,句柄为NULL。知道这是什么原因吗?我只是简单地将指针作为参数传递。如果我把open移到main函数,它可以正常工作。是什么导致了这一点?是否有隐藏的东西超出了范围 #include <iostream> #include "sqlite3.h" using namespace std; int init_table(sqlite3 *dbH, string db_name) { if (sqlite3_open(db_name.c_str(), &dbH) != SQLITE_OK) { cout << "Failed to open DB : " << sqlite3_errmsg(dbH) << endl; abort(); } else { cout << "Opened database: " << db_name << endl; } if (sqlite3_exec(dbH, "PRAGMA synchronous = OFF", NULL, NULL, NULL) != SQLITE_OK) { cout << "Failed to set synchronous: " << sqlite3_errmsg(dbH) << endl; } if (sqlite3_exec(dbH, "PRAGMA journal_mode = WAL", NULL, NULL, NULL) != SQLITE_OK) { cout << "Failed to set journal mode: " << sqlite3_errmsg(dbH) << endl; } cout << "dbH 2: " << dbH << endl; } int main() { sqlite3 * dbH; dbH = NULL; cout << "dbH 1: " << dbH << endl; string dbName = "foo1.db"; init_table(dbH, dbName); cout << "dbH 3: " << dbH << endl; }

传递给函数调用后的Null指针sqlite3句柄 当我使用C++中的函数来初始化SqLITE3时,当它从函数中出来时,句柄为NULL。知道这是什么原因吗?我只是简单地将指针作为参数传递。如果我把open移到main函数,它可以正常工作。是什么导致了这一点?是否有隐藏的东西超出了范围 #include <iostream> #include "sqlite3.h" using namespace std; int init_table(sqlite3 *dbH, string db_name) { if (sqlite3_open(db_name.c_str(), &dbH) != SQLITE_OK) { cout << "Failed to open DB : " << sqlite3_errmsg(dbH) << endl; abort(); } else { cout << "Opened database: " << db_name << endl; } if (sqlite3_exec(dbH, "PRAGMA synchronous = OFF", NULL, NULL, NULL) != SQLITE_OK) { cout << "Failed to set synchronous: " << sqlite3_errmsg(dbH) << endl; } if (sqlite3_exec(dbH, "PRAGMA journal_mode = WAL", NULL, NULL, NULL) != SQLITE_OK) { cout << "Failed to set journal mode: " << sqlite3_errmsg(dbH) << endl; } cout << "dbH 2: " << dbH << endl; } int main() { sqlite3 * dbH; dbH = NULL; cout << "dbH 1: " << dbH << endl; string dbName = "foo1.db"; init_table(dbH, dbName); cout << "dbH 3: " << dbH << endl; },c++,sqlite,C++,Sqlite,应该是吗 int init_table(sqlite3 **dbH, string db_name) 并将指针传递给指针? 可能它在sqliter处理方面没有问题。您可以将指针作为引用传递,也可以作为指向指针的指针传递 当然,在传递时,您需要在修改后将&dbH传递到init_表。无论如何,DB指针需要是一个参考参数,而不是一个值参数。(如果您不理解这一点,您可能应该花更多的时间学习C基础知识。) int init_table(sqlite3 **dbH, string db_name)

应该是吗

int init_table(sqlite3 **dbH,  string db_name)  
并将指针传递给指针?
可能它在sqliter处理方面没有问题。您可以将指针作为引用传递,也可以作为指向指针的指针传递


当然,在传递时,您需要在修改后将
&dbH
传递到
init_表。

无论如何,DB指针需要是一个参考参数,而不是一个值参数。(如果您不理解这一点,您可能应该花更多的时间学习C基础知识。)
int init_table(sqlite3 **dbH,  string db_name)