TryIt()函数导致SIGSEGV错误,但仅与GCC有关,而不与Visual C有关:

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


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

最佳答案

假设在构造TryIt()之后调用strs,则所发布的代码是正确的。由于您提到它是从全局对象的构造函数中调用的,因此可能在构造strs之前调用它。解决方法是将strs包装在一个函数中,然后调用此函数以获取数组的基地址:

std::string* strs() {
    static std::string rc[] p {
         ...
    };
    return rc;
}

10-08 11:04