Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Преобразование часового пояса https://www.cyberforum.ru/ cpp-beginners/ thread1811335.html
Помогите с решением задания хотя бы немножко вход : Время в Киеве часовой пояс результат : Время в определенном часовом поясе
Два класса в одном заголовочном файле, предварительное объявление C++
Дико туплю, никак не могу понять, где косячу. Ситуация - есть два описания классов в одном заголовочном файле (все делается с использованием Qt, но не думаю, что с ним проблема), причем второй...
Создать конструктор для массива, как члена класса C++
Добрый день! Если одним из членов класса, является массив, какой конструктор может для него использоваться, как он выглядит?
C++ Обернуть вывод в макрос Помогите, пожалуйста, сделать вывод через #define #include <stdlib.h> #include <iostream> #include <iomanip> using namespace std; int main(int argc, char** argv) { setlocale(LC_ALL,... https://www.cyberforum.ru/ cpp-beginners/ thread1811296.html
C++ Комбинированный способ организации таблицы идентификаторов https://www.cyberforum.ru/ cpp-beginners/ thread1811290.html
Всем здравствуйте,помогите пожалуйста разработать программу, реализующую комбинированный способ организации таблицы идентификаторов.Для организации таблицы используется простейшая...
Используя операции деления нацело и взятия остатка от деления, определить, имеется ли в записи числа цифра k C++
Полное условие: Дано натуральное число n. Используя операции деления нацело и взятия остатка от деления, определить, имеется ли в записи числа цифра k, где k – случайное число. Есть...
Подскажите с регуляркой построчного чтения C++
data =data+"\r\n"; std::cmatch m; std::sregex_iterator next(data.begin(), data.end(), rgx); std::sregex_iterator finish; while (true) { next++; if(next ==...
C++ Проверка mysql fields Собственно, юзая код проверки поля, сравниваю поля в бд с int, таким макаром while(row = mysql_fetch_row(res)) { for (i=0 ; i < mysql_num_fields(res); i++) { int X = atoi(row);... https://www.cyberforum.ru/ cpp-beginners/ thread1811261.html
C++ По заданной формуле реализовать функцию, возвращающую значение, и функцию, не возвращающую значение https://www.cyberforum.ru/ cpp-beginners/ thread1811254.html
Забыл как именно нужно написать и в чем отличая. К примеру возьмем пример: x^2+2x+3 Написать с возвращающим и не возвращающим значением
C++ Из списка студентов удалить тех, кто имеет по крайней мере одну двойку В элементе списка содержатся данные об успеваемости студентов: о фамилия и инициалы; о номер группы; о оценки по 3 предметам. Найти, распечатать данные обо всех, кто имеет по крайней мере 1 двойку,... https://www.cyberforum.ru/ cpp-beginners/ thread1811221.html
2 / 2 / 0
Регистрация: 23.03.2015
Сообщений: 55
0

Найти ошибки в коде и исправить эти ошибки - C++

21.09.2016, 17:44. Просмотров 1945. Ответов 4
Метки (Все метки)


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

A.h
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#pragma once
class A
{
private:
    size_t size_;
    char* str_;
    double ab_;
public:
    A(){};
    A(size_t size, char* str, double ab) : size_(size), str_(new char[size + 1]), ab_(ab){
        for (size_t i = 0; i < size_; i++)
            str_[i] = str[i];
        str_[size_] = '\0';
    };
    A(const A&);
    ~A();
    A operator=(const A&);
    void show_();
    friend A operator+(A, A);
};


A.cpp
Кликните здесь для просмотра всего текста

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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
#include "A.h"
#include<iostream>
 
A::~A(){ 
    if (str_)
    delete[] str_; 
}
 
A::A(const A& a){
    if (this != &a){
        if (str_)
            delete[] str_;
        size_ = a.size_;
        str_ = new char[size_ + 1];
        for (size_t i = 0; i < size_; i++)
            str_[i] = a.str_[i];
        str_[size_] = '\0';
        ab_ = a.ab_;
    }
}
 
A A::operator=(const A& a){
    if (this != &a){
        if (str_)
            delete[] str_;
        size_ = a.size_;
        str_ = new char[size_ + 1];
        for (size_t i = 0; i < size_; i++)
            str_[i] = a.str_[i];
        str_[size_] = '\0';
        ab_ = a.ab_;
    }
    return *this;
}
 
void A::show_(){
    std::cout << "Кол-во символов: " << size_ << std::endl;
    std::cout << str_ << std::endl;
    std::cout << "Вещественное число: " << ab_ << std::endl;
}
 
A operator+(A a1, A a2){
    A a3;
    a3.size_ = a1.size_ + a2.size_;
    if (a3.str_)
        delete[] a3.str_;
    a3.str_ = new char[a3.size_ + 1];
    for (size_t i = 0; i < a1.size_; i++)
        a3.str_[i] = a1.str_[i];
    for (size_t i = 0; i < a2.size_; i++)
        a3.str_[a1.size_ + i] = a2.str_[i];
    a3.str_[a3.size_] = '\0';
    a3.ab_ = a1.ab_ + a2.ab_;
    return a3;
}


main.cpp
Кликните здесь для просмотра всего текста

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
#include"A.h"
 
int main(){
    setlocale(0, "");
    A a1(11, "Привет мир!", 1.01);
    A a2(10, " Как дела?", 2.8);
    a1.show_();
    a2.show_();
    A a3(5," sd", 3.7);
    a3 = a1 + a2;
    a3.show_();
 
    system("pause");
    return 0;
}


Добавлено через 33 минуты
Хм.. Поправил конструктор копирования и все заработало.
C++
1
2
3
4
5
6
7
8
A::A(const A& a){
        size_ = a.size_;
        str_ = new char[size_ + 1];
        for (size_t i = 0; i < size_; i++)
            str_[i] = a.str_[i];
        str_[size_] = '\0';
        ab_ = a.ab_;
}
Вот только такое чувство что там может образоваться утечка памяти, или я зря волнуюсь и все там нормально?
Проконсультируйте пожалуйста по этому коду меня, всёли зделано правильно и что можно поправить, с меня громадная благодарность и + к карме.

Вернуться к обсуждению:
Найти ошибки в коде и исправить эти ошибки - C++
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
21.09.2016, 17:44
Готовые ответы и решения:

Найти ошибки в коде и исправить эти ошибки (Наследование)
Вот в общем 3 файла, изучаю наследование на примере односвязного и двусвязного списков: list.h...

Найти ошибки в коде и исправить эти ошибки
Есть у меня вот такой код: #include &lt;iostream&gt; using namespace std; class A{ private:...

Найти причины возникновения ошибок в коде и исправить эти ошибки
Совсем я запуталась. Опять куча ошибок. Помогите разобраться, пжлст. П.5.18.Правил Запрещено...

Найти причины возникновения ошибок в коде и исправить эти ошибки
помогите пожалуйста исправить ошибку вот код в с++ // ConsoleApplication9.cpp: определяет точку...

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