Форум программистов, компьютерный форум, киберфорум
Наши страницы

Не работает операция сложения в классе. Исправить код - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ не компелируется программа http://www.cyberforum.ru/cpp-beginners/thread677742.html
1. Создать массив с использованием указателя. Заполнить созданный массив значениями согласно варианту. Для обращения к элементам массива при заполнении использовать индексы массива. Результат в виде...
C++ Сортировка массива Понимаю ,что тема 100 раз уже подымалась. но все же укажите где моя ошибка вот ... #include "stdafx.h" #include<iostream> using namespace std; void swap(int& left, int& right) { http://www.cyberforum.ru/cpp-beginners/thread677736.html
C++ Распечатать, начиная с последнего, перевернутые слова введенного предложения
Распечатать, начиная с последнего, перевернутые слова введенного предложения.
Typecasting (типизация) C++
Добрый вечер, помогите разобраться с Typecasting. Буду благодарен если кинете ссылку на материал или приведете пример. Спасибо.
C++ Частотный анализ текста http://www.cyberforum.ru/cpp-beginners/thread677714.html
Вообщем задача, Есть текст в файле, необходимо определить, какие символы и сколько раз встречаются в тексте. Упорядочить их в порядке убывания частоты (количества) использования символов в тексте.
C++ Подсчёт количества сравнение в быстрой сортировке как сделать счетчик на количество сравнениний. #include <iostream> #include <conio.h> #include <math.h> #include <time.h> using namespace std; void quickSort(int arr, int left, int right) { ... подробнее

Показать сообщение отдельно
vxg
Модератор
3184 / 1987 / 227
Регистрация: 13.01.2012
Сообщений: 7,684
23.10.2012, 09:03
причина падения - конструктор копии не определен (в нем вы должны были бы выделить память и заполнить ее копиями данных, наверное, что-то вроде вашей функции Equate). при возврате объекта S будет вызван конструктор копии по умолчанию копирующий данные объекта один к одному. этот конструктор продублирует указатели объекта S в возвращаемый объект. после выхода из функции объект S уничтожается и в его деструкторе освобождается память. указатели которые копировались в возвращаемый объект функции становятся плохими. кроме того в вашей функции суммирования не учтено, что списки могут иметь разую длину и доступ к значению или указателю на следующий элемент для нулевого указателя (в l или r запишется ноль когда список кончится, причем это возможно даже при инициализации если непустой список складывается с пустым) оканчивается падением.
как вариант. хотя много лишней работы. по хорошему нужно скопировать наиболее длинный список в результат и потом уже результат сложить с наименее длинным делая проверку на ненулевой указатель.
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
TList operator + (const TList &L,const TList &R)
{
    TList S;
    S.n = L.n > R.n? L.n : R.n;
    if (!S.n) return S;
 
    TListItem *l = L.first;
    TListItem *r = R.first;
    TListItem *s;
    TListItem *p = 0;
 
    while (l || r)
    {
        s = new TListItem;
        if (l)
        {
            s->value += l->value;
            l = l->next;
        }
        if (r)
        {
            s->value += r->value;
            r = r->next;
        }
        if (p) p->next = s;
        p = s;
    }
 
    return S;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru