Приветствую всех,
ОШИБКА: программа получила сигнал "SIGSEGV", ошибка сегментации.
У меня возникают проблемы со следующим кодом, создающим указанную выше ошибку в Code::Blocks. Это окно чата, которое я использую для программы сетевого чата, где вектор заполняется строками текста для каждой строки журнала чата. Я не понимаю, почему это вызывает ошибку сегментации, поскольку я вообще не пытаюсь писать в какую-либо память с помощью этой процедуры.
Строка, создающая ошибку: [if(iter->empty());]. Если я удалю эту строку, она все равно вызовет ошибку при вызове функции DrawText.
Может кто-нибудь мне помочь? В данный момент для меня это был кошмар, пытаясь отладить его!
FYI -> Я кодирую в 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, но я сделал это в другом месте без проблем.