0

TryIt()函数会导致 SIGSEGV 错误,但仅适用于 GCC 而不是 Visual C:

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 回答