0

このTryIt()関数はSIGSEGVエラーを引き起こしますが、GCCでのみ発生し、VisualCでは発生しません。

string strs[] = 
{
 "str1",
 "str2",
 "str3",
 ""
};


void Tryit()
{
    int cnt = 0;
    while ( strs[cnt] != "" )
       cnt++;
}
4

1 に答える 1

1

投稿されたコードは、構築TryIt()後に呼び出されたと仮定して正しいです。strsグローバルオブジェクトのコンストラクターから呼び出されるとおっしゃっていたので、おそらくstrs構築前に呼び出されます。回避策はstrs、関数内でラップし、この関数を呼び出して配列のベースアドレスを取得することです。

std::string* strs() {
    static std::string rc[] p {
         ...
    };
    return rc;
}
于 2012-12-22T18:07:32.993 に答える