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;
}