Привет всем,
ОШИБКА: Программа получила сигнал 'SIGSEGV', ошибка сегментации.
У меня возникли проблемы со следующим кодом, создающим вышеуказанную ошибку в Code :: Blocks.Это окно чата, которое я использую для программы сетевого чата, где вектор заполнен строками текста для каждой строки журнала чата.Я не понимаю, почему это вызывает ошибку сегментации, поскольку я не пытаюсь записать в какую-либо память эту процедуру.
Строка, создающая ошибку: [if (iter-> empty ());],Если я уберу эту строку, она все равно выдаст ошибку при вызове функции DrawText.
Кто-нибудь может мне помочь?В настоящий момент для меня это был кошмар, когда я пытался отладить его!
К вашему сведению -> Я пишу код в Code :: Blocks в Ubuntu.Программа использует SDL, особенно заголовки «net» и «thread».Функция DrawText является просто оболочкой для TTF_RenderTextBlended () и SDL_BlitSurface, но я знаю, что ошибка не в функции DrawText напрямую, потому что я использовал ее во многих других проектах без проблем.
Все, что я проверяюв связи с проблемой со строками в векторе, но я не могу понять, что?
void GUI_ChatBox::Render(SDL_Surface *screen)
{
int line = 0;
for(vector<string>::reverse_iterator iter = L.rbegin(); iter != L.rend(); ++iter)
{
if(iter->empty())
continue;
++line;
DrawText(screen, iter->c_str(), x, (y + height) - (line * CHAR_HEIGHT));
}
}
L в приведенном выше примере - сокращение от LineBuffer.С ним взаимодействует только одна другая функция, и это функция, используемая для добавления текста в вектор.Вот оно:
void GUI_ChatBox::AddText(std::string text)
{
++index;
if(index >= maxLines)
{
index = maxLines;
LineBuffer.erase(LineBuffer.begin());
}
LineBuffer.push_back(text);
}
Эта функция обычно получает массив char * в качестве параметра std :: string, но я сделал это в другом месте без проблем.