Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> runtime error 
V
    Опции темы
kostay
Дата 21.10.2008, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



This application has requested tha Runtime to terminate it in an unusual way

вота такая вот хрень выскакивает в mvs после того как добавил вот ето

Код

if(s->getSiirrot().size() == 0 //or empty()


в том слу4ае когда вектор пустой.

просто задан вот так и всё

vector <BlaBla*> v;

если сделан пуш то всё ок, если потом поп и он снова пуст... тоже ошибка

в console application создаю окно опенгл, кто-нибудь знает 4то делать?


PM MAIL   Вверх
korian
Дата 21.10.2008, 21:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 3
Всего: 17



это все замечательно, но связи с вектором вообще не видно  smile 
шо такое s?
PM   Вверх
kostay
Дата 21.10.2008, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



Код

class Klas{..
vector<S*> v;

}

vector Klas::getV(){... return v;}


Klas* s = new Klas(0, 0, 0 ,0);

Добавлено через 3 минуты и 37 секунд
вобшем возврашет мне вектор

и всякие там exception тоже не ловят ето

Это сообщение отредактировал(а) kostay - 21.10.2008, 21:54
PM MAIL   Вверх
korian
Дата 21.10.2008, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 3
Всего: 17



ну уже можно включать телепатию  smile 

Код

class A
{
public:
    ~A() {for (int i = 0; i < v.size(); i++) delete v[i]; }
    vector<int*> getV() {return v}
    add(int i) {v.push_back(new int(i));}

private:
    vector<int*> v;
}

main
{
    vector<int*> myvect;
    {
        A a;
        a.add(10);
        myvect = v.getV();
    }
    *myvect[0] = 1;
}

если логика примерно такая, то это попытка доступа к уже удаленной памяти

PM   Вверх
kostay
Дата 21.10.2008, 22:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



у меня нет деструктора и никаких векторов я не удалял:
Код


class SiirtoLista{
private:
    vector<Siirto*> _siirrot;


Код

vector<Siirto*> SiirtoLista::getSiirtoLista(Asema* a){

    //...if if if

    return _siirrot;
}


App.cpp main
Код

if(s->getSiirrot().empty()


Добавлено через 1 минуту и 58 секунд
я думал изза того 4то под вектор по идее вобше памети не выделено и не сушествует он вобше, только представлен

поетому я и попробовал сделать пуш потом поп в функции которая возврашает вектор и нифи
PM MAIL   Вверх
korian
Дата 21.10.2008, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 651
Регистрация: 8.3.2008
Где: Украина, Харьков

Репутация: 3
Всего: 17



Код

vector<int> foo()
{
     vector<int> vect;
     vect.push_back(1);
     vect.push_back(2);
     vect.push_back(3);
     return vect;
}

int main
{
     cout<<foo().size();
}

в такой логике ошибок нету, так что ищите в другом месте. у вектора копирующий констуктор есть и работает.

Добавлено через 6 минут
если ошибка именно на этой строке - if(s->getSiirrot().size() == 0 //or empty()
то скорее всего, указатель s не валиден
PM   Вверх
kostay
Дата 21.10.2008, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



Код

SiirtoLista *s = _g->getLaillisetSiirrot(_asema);
        if(s->getSiirrot().empty() || _asema->isPeli()){
            
            _asema->siirra(s->getSiirrot().at(0)->getMistaX(), s->getSiirrot().at(0)->getMistaY(),
                s->getSiirrot().at(0)->getMihinX(), s->getSiirrot().at(0)->getMihinY());    //eka siirto
            glutPostRedisplay();
        }


Код

SiirtoLista* Generaattori::getLaillisetSiirrot(Asema* a){
    SiirtoLista* s = new SiirtoLista();
    s->getSiirtoLista(a);
    return s;
}


вот ешо кода кусок, больше ни4его на ум не приходит?
потому4то ошибка именно тогда когда проверяю вектор на пустоту
PM MAIL   Вверх
bsa
Дата 23.10.2008, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



kostay, пиши пожалуйста по-русски букву "Ч" - намного удобнее читать
Ищи переполнение. Обычно, подобные глюки возникают при выходе за пределы массивов где-то в программе (не обязательно в этой строке). Программы типа valgrind могут тебе помочь найти виновного.
PM   Вверх
J0ker
Дата 23.10.2008, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 986
Регистрация: 17.9.2008

Репутация: 4
Всего: 14



Цитата(bsa @  23.10.2008,  17:52 Найти цитируемый пост)
Ищи переполнение. Обычно, подобные глюки возникают при выходе за пределы массивов где-то в программе (не обязательно в этой строке).

обычно данный конкретный глюк возникает при переходе выполнения на невалидный адрес
в данном коде
Код

f(s->getSiirrot().size() == 0 //or empty()

либо невалиден s либо getSiirrot() возвращает невалидную ссылку
все очень легко проверить под любым дебагером, либо добавить грамотную диагностику через assert или вывод в консоль/файл


--------------------
user posted image
PM MAIL   Вверх
kostay
Дата 24.10.2008, 02:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 205
Регистрация: 16.5.2007

Репутация: нет
Всего: нет



Код

if(s->getSiirrot().size()!=0 || _asema->isPeli()){
            //ja sirretддn ekaan tarjottuun
            /*_asema->siirra(s->getSiirrot().at(0)->getMistaX(), s->getSiirrot().at(0)->getMistaY(),
                s->getSiirrot().at(0)->getMihinX(), s->getSiirrot().at(0)->getMihinY());    //eka siirto
            glutPostRedisplay();*/
            std::cout<<"\nEmpty";
        }

как я понимаю ошибка возника ла при обрашении к .at(0) так как такого нет, вот шас пробовал в условии и тру, и ноль и равно и не равно всегда проходит и печатает емпти

Добавлено через 2 минуты и 32 секунды
ну как обы4но... || влепил нетак. вопрос закрыт сори.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0489 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.