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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Svinina
5 / 5 / 0
Регистрация: 28.11.2010
Сообщений: 81
#1

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

20.11.2011, 19:32. Просмотров 683. Ответов 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();
}
Подскажите, есть тут какие-нибудь косяки?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.11.2011, 19:32     Программа то вылетает с ошибкой, то работает корректно
Посмотрите здесь:

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

Программа вылетает с неизвестной ошибкой - C++
Всем доброго времени суток. Имеется следующий простенький код для рисования круга. #include &lt;iostream&gt; #include &lt;windows.h&gt; #include...

Виртуальные функции. Программа вылетает с ошибкой. - C++
Хотя дело может быть и не в виртуальных функциях. В общем портянка такова: #include &lt;iostream&gt; #include &lt;cstdlib&gt; #include...

Программа вылетает с ошибкой std::bad_alloc - C++
Всем привет! Задали написать программу, которая удаляет из файла все закомментированные строки(учитываются и //, и /* */) и реализовать в...

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

При обращении к индексу двумерного массива char программа вылетает с ошибкой - C++
Программа вылетает с ошибкой на 66й строке. Почему?((( // Task_1.cpp : Defines the entry point for the console application. // ...

Не корректно работает программа в C++ - C++
Составьте алгоритм программы, которая принимает от пользователя значение x и в зависимости от его значения, расчитывет значение функии f(x)...

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

Не корректно работает программа с класами - C++
Привет Всем. У меня есть к Вам просьба. Я вот написал программу,но в ней редактирование и удаление данных из базы данных работает не...

Программа работает корректно, но не до конца - C++
пользователь вводит шестизначное число. Разбить его на два трехзначных числа. и записать их в разные переменные. Вот мой код.:(...

Не корректно работает программа,посмотрите - C++
#include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;iomanip.h&gt; #include &lt;math.h&gt; int main(void) { clrscr(); int x; ...

Не корректно работает программа (Упорядочить элементы матрицы) - C++
Условие: Дана матрица целых чисел N* M.Упорядочить элементы матрицы так чтобы четные элементы матрицы максимально плотно заняли верхнюю...


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

Или воспользуйтесь поиском по форуму:
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     Программа то вылетает с ошибкой, то работает корректно
Ответ Создать тему
Опции темы

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