在封裝了sqlite的介面後,使用find時,需要將所查詢到的資料返回
在封裝的介面中,查詢結果是作為類成員的私有變數存放的
int nrow, ncolumn; /*! 查詢結果的行列 */
char **azresult; /*! sqlite的查詢結果表 */
在介面中,使用了傳入的指標引數來獲取查詢結果
datafind(char *filepath, int mode, int rowandcolumn[2], char **result);
在介面外對result進行操作即可以得到所查詢的結果
但在實際執行過程中,當從result獲取結果時,發生段錯誤
介面中的描述為
rowandcolumn[0] = nrow; /*! 返回行數 */
rowandcolumn[1] = ncolumn; /*! 返回列數 */
result = azresult; /*! 返回查詢到的資料陣列,第一行為欄位名 */
肉眼沒有發現問題,想到在介面內將兩個二維陣列的位址列印出來檢視
printf("%p\n",azresult);
printf("%p\n", result);
得到的位址也是一樣
0xa168064
0xa168064
但在介面外列印result的位址時,得到的是
(nil)
發現位址並沒有被傳出來
突然想到函式在傳遞引數時的位址問題,將傳入引數改為
datafind(char *filepath, int mode, int rowandcolumn[2], char ***result);
介面內更改為
rowandcolumn[0] = nrow; /*! 返回行數 */
rowandcolumn[1] = ncolumn; /*! 返回列數 */
*result = azresult; /*! 返回查詢到的資料陣列,第一行為欄位名 */
然後再列印位址檢視,發現介面內兩個位址不一樣
0x83be02c
0xbfccde7c
但是介面外列印的位址為
0x83be02c
與需要的結果位址一致
此時再對result進行操作獲取查詢結果,成功的得到資料
思考一番得到如下:
開始使用 char **result 做引數時,在函式體內改變的並不是其指標本身,而是指標內指向的位置
使用 char ***result 做引數後,相當於將指標的位址做引數傳入,這時再操作改變的就是我們希望變化的指標
所以在希望將某個指標的值傳出時,傳入的引數必須是乙個指標的指標,這樣才能達到改變傳入指標值的目的
暫時想到這些,不管對錯,挖坑待填...
獲取類中的私有變數
當反射呼叫dll時,我們可能想要獲取類中對應的私有變數,但是普通的呼叫是看不到私有變數,需要我們做進一步處理 命名空間 using system.reflection public static class getprivateex public static t getprivatepropert...
類的私有變數
1.在python 中可以通過在屬性變數名前加上雙下劃線定義屬性為私有屬性 特殊變數命名 案例 class a object zhe shi shuo ming name ling man def hello self print self.name print self.def get self ...
類物件 私有變數
類及物件 class critter object a virtual pet deftalk self print hi,i m instance of class critter.crit critter crit.talk hi,i m instance of class critter.構造...