[ad_1]
int COXEdit::Validate() { static CString sFullText; int nRet=ValidateInput(); CString sNewText=GetInputData(); if ((::IsWindow(m_hWnd)) && (UINT) sNewText.GetLength()>GetLimitText()) { int n=0; for (n=0; n<sFullText.GetLength(); n++) m_arrInputData.SetAtGrow(n,sFullText.GetAt(n)); m_arrInputData.SetAtGrow(n,NULL); } sFullText=COXEdit::GetInputData(); return nRet; }
私が試したこと:
その変数の目的は何ですか。 私は何も見ることができず、関数ローカル静的の使用は多くの問題を引き起こします..含む(ただし、含まれるプログラムの即時クラッシュに限定されないのは、コントロールがデフォルトドメインの外部からアクセスされることです)….
解決策 1
static
C++ では、使用される場所によって意味が異なります。 static
関数内の変数はアプリケーションの存続期間にわたって割り当てられ、関数が何度も呼び出されても値は保持されます。 たとえば、 static
変数をゼロに設定し、treh 関数が呼び出されるたびにそれをインクリメントすると、その関数の「呼び出しカウンター」として機能する前回の呼び出しの値が保持されます。非静的と宣言されている場合、値は保持されません。
コードでは、文字列は関数内に保持されるため、関数が呼び出されるたびに「成長」します。
解決策 2
その変数を静的にする有用な目的はありません。 変数は割り当てられていますが、何にも使用されていないため、その存在の目的はまったくありません。 また、呼び方も GetInputData
その構文は通常、静的メソッドの呼び出しに使用されるため、少し奇妙です。
そのコードを処理する必要がある場合は、次の両方の宣言をコメントアウトします sFullText
そしてそれが割り当てられている行を見て、何が起こるか見てみましょう。 副作用がなければ GetInputData
関数、何も起こらないはずです。
[ad_2]
コメント