Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.06.2014, 16:58   #1
gunsoy
Форумчанин
 
Регистрация: 30.12.2010
Сообщений: 280
Вопрос Программа возвращает returned 139

Здравствуйте.

Есть код который выглядит примерно так

Код:
while(running)
{
    .......
    if(status == 1)
    {
        FStruct fstruct;  // Это структура
        Location loc;      // Это класс
        loc.OnInit(Surf_Display, sock);
        loc.OnExecute(&fstruct);
        status = 0;
        std::cout << "FStruct " << fstruct.id;
    }
    else if(status == 2)
    {
    ....
    }
    std::cout << "Proverka";
    ......
}
После того как класс Location завершает свою работу, std::cout выводит на экран id структуры и тут же программа почему-то завершает свою работу, на экран выводится returned 139 (...). Слово Proverka не выводится. То есть программа завершает свою работу после того как выходит за блок кода if(status == 1) { }. Не могу понять в чём причина.

Подскажите пожалуйста, в чём может быть проблема? Что вообще означает returned 139?

Спасибо за внимание.
gunsoy вне форума Ответить с цитированием
Старый 15.06.2014, 19:05   #2
gunsoy
Форумчанин
 
Регистрация: 30.12.2010
Сообщений: 280
По умолчанию

Сделал так

Код:
Location * loc;
loc = new Location[1];
loc->OnInit(Surf_Display, sock);
loc->OnExecute(&fstruct);
std::cout << "Вывод 1";
delete [] loc;
std::cout << "Вывод 2";
и понял что программа вылетает после удаления класса loc. "Вывод 1" есть, а второго нет.

Там кстати не просто Process returned 139, а ещё и Segmentation fault, который я не углядел.
Что же может быть в том классе что программа завершается при его удалении? Это из-за указателей? Класс выложить не могу, так как слишком большой=(

Как вообще это можно выяснить? std::cout тут не поможет=(
gunsoy вне форума Ответить с цитированием
Старый 15.06.2014, 19:57   #3
_Bers
Старожил
 
Регистрация: 16.12.2011
Сообщений: 2,329
По умолчанию

Цитата:
Сообщение от gunsoy Посмотреть сообщение
Что же может быть в том классе что программа завершается при его удалении? Это из-за указателей? Класс выложить не могу, так как слишком большой=(

Как вообще это можно выяснить? std::cout тут не поможет=(
Боюсь, что все телепаты ушли в отпуск.
_Bers вне форума Ответить с цитированием
Старый 15.06.2014, 20:02   #4
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,333
По умолчанию

покажи деструктор класса Location
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance
pproger вне форума Ответить с цитированием
Старый 15.06.2014, 21:07   #5
gunsoy
Форумчанин
 
Регистрация: 30.12.2010
Сообщений: 280
По умолчанию

Когда я писал первый пост, у меня не было деструктора. Просидев несколько часов в поисках проблем, добавил деструктор.

Код:
Location::~Location()
{
    SDL_FreeSurface(LoginBackground);
    SDL_FreeSurface(AuthorsBackground);
    SDL_FreeSurface(TriInfoBackground);
    SDL_FreeSurface(TriBackground);
    SDL_FreeSurface(LoginText);
    SDL_FreeSurface(LoginCursor);
    SDL_FreeSurface(CentralBackground);
    if(BoolCentral == true)
    {
        delete [] CentralFonImage;
        delete [] CentralImage;
    }
    if(REffectImage > 0)
    {
        delete [] RightEffectImage;
    }
    if(IEffectImage > 0)
    {
        delete [] CentralEffectImage;
    }
}
Членами этого класса являются два других класса. С другими классами проблем не возникает. Вот деструкторы классов, членов класса Location

Код:
LocationImage::~LocationImage()
{
    glDeleteTextures(1, &colorTexture);
    glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, 0);
	glBindBuffer(GL_ARRAY_BUFFER, 0);
	glDeleteBuffers(3, meshVBO);
	glBindVertexArray(0);
	glDeleteVertexArrays(1, &meshVAO);
	glUseProgram(0);
	glDeleteProgram(shaderProgram);
	glBindTexture(GL_TEXTURE_2D, 0);
}
Код:
TTFImageWrite::~TTFImageWrite()
{
    glDeleteTextures(1, &colorTextureBG);
    glDeleteTextures(1, &colorTextureText);
}
Поделитесь хотя бы предположениями из-за чего такая фигня может происходить. Для всех указателей, которые я использую в классе создал деструктор и не помогло. Значит не в указателях дело?
gunsoy вне форума Ответить с цитированием
Старый 15.06.2014, 23:47   #6
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,330
По умолчанию

Цитата:
Сообщение от gunsoy Посмотреть сообщение
Поделитесь хотя бы предположениями из-за чего такая фигня может происходить.
А) Удаляете память дважды.
Б) Обращаетесь к удаленной памяти.
В) Обращаетесь к неинициализированному указателю.

Запустите программу под отладчиком и смотрите из какой строчки ломается.
waleri вне форума Ответить с цитированием
Старый 16.06.2014, 17:54   #7
gunsoy
Форумчанин
 
Регистрация: 30.12.2010
Сообщений: 280
По умолчанию

Немного помучался при обучении работы с отладчиком, отладчик помог обнаружить проблоемы. Проблемы были в деструкторе класса LocationImage. Спасибо за помощь.
gunsoy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
почему не возвращает? Praud Помощь студентам 4 16.12.2013 14:17
[Error] ld returned 1 exit status Tpogih Общие вопросы C/C++ 2 08.12.2013 09:26
Pos возвращает 0 danil123 Общие вопросы Delphi 4 13.07.2012 16:06
ld returned 1 exit status Hemul Qt и кроссплатформенное программирование С/С++ 9 07.04.2011 11:31
Запрос возвращает пустую таблицу, если один из подзаросов возвращает пустую таблицу ArtInt SQL, базы данных 9 12.05.2010 15:40