Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Svinina
 Аватар для Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
20.11.2011, 19:32     Программа то вылетает с ошибкой, то работает корректно #1
При запуске программа то вылетает с ошибкой, то работает нормально.
Нутром чую, что проблема в следующем куске кода, где я создаю объекты типа 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();
}
Подскажите, есть тут какие-нибудь косяки?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.11.2011, 19:53     Программа то вылетает с ошибкой, то работает корректно #2
Строки 14-15 приводят к утечке памяти.
Svinina
 Аватар для Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
20.11.2011, 19:57  [ТС]     Программа то вылетает с ошибкой, то работает корректно #3
Deviaphan, каким образом? Ведь созданный объект отправляется в вектор nodes, нет?
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.11.2011, 19:59     Программа то вылетает с ошибкой, то работает корректно #4
Нет. Не отправляется.
Svinina
 Аватар для Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
20.11.2011, 20:02  [ТС]     Программа то вылетает с ошибкой, то работает корректно #5
Цитата Сообщение от Deviaphan Посмотреть сообщение
Нет. Не отправляется.
А что тогда происходит в 14-15 строках?
Я думал, я выделяю память под новый экземпляр, а затем отправляю его в вектор.
Jupiter
Каратель
Эксперт C++
6542 / 3962 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
20.11.2011, 20:05     Программа то вылетает с ошибкой, то работает корректно #6
Цитата Сообщение от Svinina Посмотреть сообщение
А что тогда происходит в 14-15 строках?
в 15-й строке он копируется, потому создавай вектор указателей(только почистить потом не забудь), а еще лучше вектор смарт-указателей(чистить не надо)
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
20.11.2011, 20:07     Программа то вылетает с ошибкой, то работает корректно #7
Цитата Сообщение от Jupiter Посмотреть сообщение
потому создавай вектор указателей
Или вектор объектов.
Svinina
 Аватар для Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
20.11.2011, 20:12  [ТС]     Программа то вылетает с ошибкой, то работает корректно #8
Цитата Сообщение от Deviaphan Посмотреть сообщение
Или вектор объектов.
Так я и создал вектор объектов.

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

C++ При обращении к индексу двумерного массива char программа вылетает с ошибкой
C++ Программа вылетает с неизвестной ошибкой
C++ Чтение из файла - программа корректно работает лишь раз

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

Или воспользуйтесь поиском по форуму:
Svinina
 Аватар для Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
20.11.2011, 20:36  [ТС]     Программа то вылетает с ошибкой, то работает корректно #12
Файл открывается нормально. Если вектор nodes заменить на динамический массив, все замечательно работает.

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

Добавлено через 1 минуту
А в 5 и 27 строке проблем нет?
Yandex
Объявления
20.11.2011, 20:36     Программа то вылетает с ошибкой, то работает корректно
Ответ Создать тему
Опции темы

Текущее время: 19:21. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru