輸入引數一處隱藏錯誤,致命錯誤

2021-10-22 07:35:13 字數 820 閱讀 7706

大部分函式的引數都是用於輸入

但,也存在用於輸出

比如說:

bool addfun(int nitem, int &nret);

像第二個引數 nret是可以用於輸出,當然也可以做輸入

由於c語言限制,c語言裡要這樣寫:

bool addfun(int nitem, int *nret);

寫法不一樣,功能是一樣的。

這裡會存在問題的,而且是致命的,所以使用的時候要注意!

例如:函式

bool addfun(int32_t dwid, int32_t *dwnameid)

*dwnameid = 8;  //隨便舉個例子,就是說這個引數被改變了(重新賦值)

實際呼叫的地方:

static int16_t wtestflag = 34;

static int16_t wnameid = 0;

addfun(123456, &wnameid);

補充 int16_t 表示2位元組的整形,int32_t 表示4位元組的整形

不知道有沒有發現問題?

是的,這樣寫編譯沒有問題,結果也未必會有錯誤的影響。

注意:輸入源:wnameid 是乙個 2位元組整形,addfun 的引數是4位元組的,

如果呼叫 addfun,那麼  會從 &wnameid 位址開始 連續 取4個位元組

而addfun 會對這個位址進行賦值操作,這樣原先2位元組的前面兩個位元組會因為重新賦值而變成0,

這樣就會出現奇怪的問題,臨近的變數 莫名的被改掉,很危險。

所以,如果作為輸出用的引數,就不要強制轉換了,當然也包括各種結構體,類等引數

禁用WordPress致命錯誤(WSOD)處理

下面由wordpress教程欄目給大家介紹如何禁用wordpress致命錯誤 wsod 處理,希望對需要的朋友有所幫助!wordpress 5.2內建了乙個新功能,當檢測到外掛程式或主題發生錯誤時,自動傳送郵件通知 管理員,即使在後端完全無法訪問的情況下 例如發生所謂的 白屏宕機 管理員仍然有機會登...

Web應用架構 錯誤統一處理, 和事務統一處理

因為前期,重點放在業務分析上,這兩塊一直認真思考過,覺得很簡單.一開始只是找了乙個nhibernate的示例,就決定把session的open和close和事務 transaction 的commit,放在httpmodule中處理.算是session per request的模式.之後,繼續加入錯...

Web應用架構 錯誤統一處理, 和事務統一處理

因為前期,重點放在業務分析上,這兩塊一直認真思考過,覺得很簡單.一開始只是找了乙個nhibernate的示例,就決定把session的open和close和事務 transaction 的commit,放在httpmodule中處理.算是session per request的模式.之後,繼續加入錯...