Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
1

Программа то вылетает с ошибкой, то работает корректно

20.11.2011, 19:32. Просмотров 719. Ответов 11
Метки нет (Все метки)

При запуске программа то вылетает с ошибкой, то работает нормально.
Нутром чую, что проблема в следующем куске кода, где я создаю объекты типа gc_node и заталкиваю их в вектор, а затем уже обращаясь к ним как к элементам динамического, вызываю метод, аргументами которого являются указатель на элемент массива и число типа дабл:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
......
std::vector<gc_node> nodes;
......
void setneighbour(gc_node *neighbour, double edge_weight);
.....
int size = 10;
.....
 
void gc_algorithm::load_data(std::string str_nodes, std::string str_edges)
{    
    for(int i = 0; i < size; i++)
    {
        gc_node *newnode = new gc_node;
        nodes.push_back(*newnode);
    }
    innodes.close();
 
    std::ifstream inedges(str_edges.c_str());
    for(int i = 0; i < size; i++)
    {
 
        for(int j = 0; j < size; j++)
        {
            double e;
            inedges >> e;
            if(e) nodes[i].setneighbour(&nodes[j], e);
        }
 
    }
    inedges.close();
}
Подскажите, есть тут какие-нибудь косяки?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2011, 19:32
Ответы с готовыми решениями:

Программа вылетает с ошибкой
начал читать Б. Страуструпа &quot;Программирование. Принципы и практика...

Программа вылетает с неизвестной ошибкой
Всем доброго времени суток. Имеется следующий простенький код для рисования...

Виртуальные функции. Программа вылетает с ошибкой.
Хотя дело может быть и не в виртуальных функциях. В общем портянка такова: ...

Программа вылетает с ошибкой std::bad_alloc
Всем привет! Задали написать программу, которая удаляет из файла все...

Программа заканчивает работу корректно, но вылетает
Калькулятор шифра Виженера Работает корректно, выводит результат и винда...

11
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
20.11.2011, 19:53 2
Строки 14-15 приводят к утечке памяти.
0
Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
20.11.2011, 19:57  [ТС] 3
Deviaphan, каким образом? Ведь созданный объект отправляется в вектор nodes, нет?
0
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
20.11.2011, 19:59 4
Нет. Не отправляется.
1
Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
20.11.2011, 20:02  [ТС] 5
Цитата Сообщение от Deviaphan Посмотреть сообщение
Нет. Не отправляется.
А что тогда происходит в 14-15 строках?
Я думал, я выделяю память под новый экземпляр, а затем отправляю его в вектор.
0
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.11.2011, 20:05 6
Цитата Сообщение от Svinina Посмотреть сообщение
А что тогда происходит в 14-15 строках?
в 15-й строке он копируется, потому создавай вектор указателей(только почистить потом не забудь), а еще лучше вектор смарт-указателей(чистить не надо)
1
Deviaphan
Делаю внезапно и красиво
Эксперт С++
1306 / 1221 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
20.11.2011, 20:07 7
Цитата Сообщение от Jupiter Посмотреть сообщение
потому создавай вектор указателей
Или вектор объектов.
0
Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
20.11.2011, 20:12  [ТС] 8
Цитата Сообщение от Deviaphan Посмотреть сообщение
Или вектор объектов.
Так я и создал вектор объектов.

в 15-й строке он копируется
Почему? Ведь push_back имеет вид void push_back(const T &val).
Ведь это ссылка? То есть передавая туда объект я по идее передаю неявный указатель?
0
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.11.2011, 20:25 9
Цитата Сообщение от Svinina Посмотреть сообщение
Ведь это ссылка?
нет, это ссылка на константу
http://liveworkspace.org/code/2368a48c3b398ad925945e4beaf338e8
0
Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
20.11.2011, 20:29  [ТС] 10
Исправил эти строки на
C++
1
2
        gc_node newnode;
        nodes.push_back(newnode);
Прога все равно вылетает.
0
Jupiter
Каратель
Эксперт С++
6569 / 3990 / 400
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.11.2011, 20:30 11
файл немешало бы проверить на открытие
0
Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
20.11.2011, 20:36  [ТС] 12
Файл открывается нормально. Если вектор nodes заменить на динамический массив, все замечательно работает.

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

Добавлено через 1 минуту
А в 5 и 27 строке проблем нет?
0
20.11.2011, 20:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2011, 20:36

Удаление последнего элемента динамического массива (программа вылетает с ошибкой)
for (vector&lt;P&gt;::iterator i = p.begin(); i != p.end(); ++i) { ...

При обращении к индексу двумерного массива char программа вылетает с ошибкой
Программа вылетает с ошибкой на 66й строке. Почему?((( // Task_1.cpp : Defines...

Программа работает не корректно
Здравствуйте, помогите мне пожалуйста разобраться с программой. Вот само...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru