Почему этот код вызывает SIGSEGV (компилятор gcc, Android NDK toolchain под cygwin)?

TryIt() Функция вызывает ошибку SIGSEGV, но только с GCC, а не с Visual C:

string strs[] =
{
"str1",
"str2",
"str3",
""};void Tryit()
{
int cnt = 0;
while ( strs[cnt] != "" )
cnt++;
}

0

Решение

Код, как размещено, является правильным, при условии, что TryIt() называется после strs был построен. Поскольку вы упоминаете, что он вызывается из конструктора глобального объекта, он, вероятно, вызывается раньше strs построен Обходной путь, чтобы обернуть strs внутри функции и вызовите эту функцию, чтобы получить базовый адрес массива:

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]