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;
}
Других решений пока нет …