С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/18: Рейтинг темы: голосов - 18, средняя оценка - 4.83
0 / 0 / 1
Регистрация: 19.09.2020
Сообщений: 71
1

Ошибка free(): double free detected in tcache 2

06.12.2021, 14:15. Показов 3294. Ответов 1
Метки c++ (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день! Столкнулся с проблемой, при запуске программы появляется строка "free(): double free detected in tcache 2". Скажите, пожалуйста, в чем проблема, и как это исправить?

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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <iostream>
#include <locale>
#include <cmath>
#include <cassert>//оператор проверочного утверждения
using namespace std;
enum class Color // Класс перечисления для будущего цвета графика
{
    red = 0, 
    green,    
    blue,        
};  
//------------------------------------------------------------------------------
class Rhombus 
{
    private:
        static int AmountOfRhombus;  //статическая переменная для хранения количества ромбов
        const int m_number;//пременная, которая содержит номер ромба.номер присваивается 1 раз и не изменяется
        static int lastRhombusNumber; // статическая переменная для хранения последнего номера, что бы каждый следующий имел номер на едицинцубольше
        double side;  // строна
        int angle_1; // меньший угол
        double diagonal_1;//диагональ1
        Color m_color;//цвет 
        const string m_name;//имя ромба
        int* m_linksToRhombus;////указатель, в котором будет храниться адрес динамического массива ссылок, где упоминается этот ромб
        int m_linksAmount;//количество ромбов
//------------------------------------------------------------------------------
    public: // геттеры
        Color getColor() const {return m_color;}//геттер для цвета
        double getside() {return side;}  // геттер для стороны
        int getangle_1() {return angle_1;} // геттер для угла 
        double getdiagonal_1() {return diagonal_1;}//геттер для диагонали
        int getLink (int index) const {return m_linksToRhombus[index];}// возвращает по индексу страницу упомнинания
        //возвращает количество уравнений
        static int getTheAmountOfRhombus () {return AmountOfRhombus;}//возвращает количество ромбов
//------------------------------------------------------------------------------------------------------------
        //сеттеры
        void setside(int a) 
        {
            assert(a!=0);
            side = a; 
        }
        
        void setangle_1 (int b)
        {
            assert(b<180);
            angle_1 = b;
        }
        void setLinkValue(int index, int value)
        {
            assert((index >= 0) && (index < m_linksAmount));  //проверка индекса 
            m_linksToRhombus [index] = value; //присваиваем значение конкретной страницы(ссылки) элементу массива страниц (ссылок) с конкретным индексом 
        }
//-------------------------------------------------------------------------------
 
    void printInfo (bool showLink= true)  const {  // показываем
            string color;
        if (m_color == Color::red) color = " красного ";
        else if (m_color == Color::green) color = " зеленого ";
        else color = " синего ";
        cout<<"Перед вами "<< m_name<<" № "<<m_number <<  color <<" цвета "<<"со стороной :  "<<side<<" см "<<", а также "<<"углами: первый и второй: "<<angle_1<<"°, остальные: "<<180-angle_1<<"°, диагоналями :  "<<side*(sqrt(2+(2*cos(angle_1 * 3.14159 / 180))))<<" см и "<<side*(sqrt(2+(2*cos((180 - angle_1) * 3.14159 / 180))))<<" см "<< endl;
            if (showLink)
            {
                std::cout << "Число упоминаний ромбов: " << m_linksAmount << endl;
                for (int i = 0; i < m_linksAmount; i++)
                {
                   cout << "[" << i << "]: " << m_linksToRhombus[i] <<endl;
                }
            }
            cout << "Общее число ромбов: " << getTheAmountOfRhombus()<< "." << endl;
            cout << "-------------------------------------" << endl;
        }    
 
//-------------------------------------------------------------------------------------------------------------
    Rhombus addRhombus(const Rhombus& RhombusToAdd) //Сложение ромбов - здесь аргумент RhombusToAdd должен быть константным,иначе константные экземпляры класса нельязя будет прибавлять
    {
        int newside = side + RhombusToAdd.side;// работает на уровне класса, а не на уровне его экземпляров
        double newangle_1 = angle_1; 
        
        if (angle_1==RhombusToAdd.angle_1)
        {
            angle_1 = newangle_1;
            side = newside;
 
            std::cout << "Ромб \"Ромб" << m_number << "\" был изменен." << std::endl;
           
        }
        else
        {
            std::cout << "Ошибка при попытке изменения ромбов \"Ромб" << m_number << "\"." << std::endl;
        } 
 
        std::cout << "-------------------------------------" << std::endl;
        return *this; // возвращаем то, что хранится по собственному адресу (ссылку на обновленного "себя")
    }
//-------------------------------------------------------------------------------------------------------       
        Rhombus(double side = 0 ,double angle_1 = 0,Color color = Color::red, int linksAmount = 10) : m_color(color), m_name(" ромб "),m_linksAmount(linksAmount), m_number(++lastRhombusNumber){// констуктор
        setside(side);
        setangle_1(angle_1);
        assert((linksAmount >= 0) && (linksAmount < 1000));  //вызываем функцию сравнения аргумента с 0
        m_linksToRhombus = new int[linksAmount] {};//динамически выделяем память под массив ссылок, обнуляем его элементы
 
        AmountOfRhombus++;// увеличиваем значение переменной на 1 (количество уравнений выросло на 1)
 
        std::cout << "Создан новый ромб." << std::endl;
        std::cout << "-------------------------------------" << std::endl;
    }
//-------------------------------------------------------------------------------------------------------------
 ~Rhombus()
    {
        AmountOfRhombus--;
 
        delete[] m_linksToRhombus;
 
        std::cout << "Удален ромбов \"Ромб" << m_number  << "\"." << std::endl;
        std::cout << "Общее число ромбов: " << getTheAmountOfRhombus() << "." << std::endl;
        std::cout << "-------------------------------------" << std::endl;
    }
};
//------------------------------------------------------------------------------------------------------------
int Rhombus:: AmountOfRhombus = 0; // Присваиваем начальные значения статическим переменным класса вне функций (по аналогии с обычными глобальными) 
int Rhombus:: lastRhombusNumber=0;
//------------------------------------------------------------------------------------------------------------
int main()
{
    setlocale(LC_ALL, "Russian");
    const Rhombus r1 { 15,60, Color::green };
    r1.printInfo(true);
    
    Rhombus r2 { 10,120, Color::red };
    r2.printInfo(false);
 
    r1.~Rhombus();;
    
    Rhombus r3{ 2, 90, Color::blue, 4 };
    r3.printInfo(false);
 
    Rhombus r4{ 8, 120, Color::green, 2 };
    r4.printInfo(false);
    
    const Rhombus r5{ 12, 45, Color::green, 2 };
    r5.printInfo(false);
 
    r2.addRhombus(r4);
    r2.printInfo(false);
 
    r3.addRhombus(r2);
    r3.printInfo(false);
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
06.12.2021, 14:15
Ответы с готовыми решениями:

free(): double free detected in tcache 2
После запуска скомпилированной программы вылетает это: q z free(): double free detected in...

Ошибка: double free or corruption (fasttop)
Я описываю метод diamond-square. Это метод для процедурной генерации мира (кому интересно - вот...

Ошибка этапа исполнения: double free or corruption (fasttop):
Доброе времени суток подскажите пожалуйста в чем может быть следующая проблема. Код который...

Ошибка "double free or corruption" в динамическом двумерном массиве
Доброго времени. Не могу понять, почему выскакивает эта ошибка: *** Error in `./a.out': double...

Double free or corruption (out)
std::stringstream brf; brf &lt;&lt; a.rdbuf(); char *tmp = new char(brf.length());...

1
19409 / 10028 / 2443
Регистрация: 30.01.2014
Сообщений: 17,678
06.12.2021, 14:23 2
Цитата Сообщение от qwert10 Посмотреть сообщение
r1.~Rhombus();;
Во-первых кто вас научил вручную деструктор вызывать?

Во-вторых см. здесь: Распространенные ошибки

Проявляется здесь:
Цитата Сообщение от qwert10 Посмотреть сообщение
Rhombus addRhombus(const Rhombus& RhombusToAdd)
1
06.12.2021, 14:23
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
06.12.2021, 14:23
Помогаю со студенческими работами здесь

double free or corruption (out)
На вход программы даётся логическая функция, записанная в форме КНФ. Требуется, используя принцип...

Double free or corruption при изменении размера динамического массива
Сразу скажу, что у меня задание на работу с памятью, и std::vector по условию использовать...

Double free or corruption
Здравствуйте, вылетает такая ошибка Версия DEBUG, но всё-равно почему-то не пишет названий...

Double free or corruption (fasttop)
Помогите разобраться в чем может быть причина. Есть одна очень большая программа. И она...

Free DNS + free hosting?
Подскажите есть ли free dns+free hosting? Надо зарегерить домен, но регистратор просит сначала...

ошибка с free
#define _CRTDBG_MAP_ALLOC #include &lt;stdlib.h&gt; #include &lt;crtdbg.h&gt; #include &lt;iostream&gt; #include...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Это работает. Скорость асинхронной логики велика. Вопрос видимо останется в стабильности. Плата - огонь!
Hrethgir 13.01.2025
По прошлому проекту в Logisim Evolution прилагаю файл архива проекта Gowin Eda и снимок. Восьмибитный счётчик из сумматора+ генератор сигнала согласования+ стартер fast регистров. Файлы прилагаю. . . .
UserScript для подсветки кнопок языков программировани­­­­я в зависимости от текущего раздела
volvo 13.01.2025
В результате работы этого скрипта подсвечиваются нужные кнопки не только в форме быстрого ответа, но и при редактировании сообщения: / / ==UserScript== / / @name CF_DefaultLangSelect / / . . .
Введение в модели и алгоритмы машинного обучения
InfoMaster 12.01.2025
Машинное обучение представляет собой одну из наиболее динамично развивающихся областей искусственного интеллекта, которая фокусируется на разработке алгоритмов и методов, позволяющих компьютерам. . .
Как на Python создать нейросеть для решения задач
InfoMaster 12.01.2025
В контексте стремительного развития современных технологий особое внимание уделяется таким инструментам, как нейросети. Эти структуры, вдохновленные биологическими нейронными сетями, используются для. . .
Как создать нейросеть для генерации картинок на Python
InfoMaster 12.01.2025
Генерация изображений с помощью искусственных нейронных сетей стала одним из наиболее захватывающих направлений в области компьютерного зрения и машинного обучения. В этой статье мы рассмотрим. . .
Создание нейросети для генерации текста на Python
InfoMaster 12.01.2025
Нейросети, или искусственные нейронные сети, представляют собой модели машинного обучения, вдохновленные работой человеческого мозга. Они состоят из множества взаимосвязанных узлов, или "нейронов",. . .
Как создать нейросеть распознавания изображений на Python
InfoMaster 12.01.2025
Введение в распознавание изображений с помощью нейросетей Распознавание изображений с помощью нейронных сетей стало одним из самых впечатляющих достижений в области искусственного интеллекта. Эта. . .
Основы искуственного интеллекта
InfoMaster 12.01.2025
Искусственный интеллект (ИИ) представляет собой одну из наиболее динамично развивающихся областей современной науки и технологий. В широком смысле под искусственным интеллектом понимается способность. . .
Python и нейросети
InfoMaster 12.01.2025
Искусственные нейронные сети стали неотъемлемой частью современных технологий, революционизировав множество областей - от медицинской диагностики до автономных транспортных средств. Python, благодаря. . .
Python в машинном обучении
InfoMaster 12.01.2025
Python стал неотъемлемой частью современного машинного обучения, завоевав позицию ведущего языка программирования в этой области. Его популярность обусловлена несколькими ключевыми факторами, которые. . .
Создание UI на Python с TKinter
InfoMaster 12.01.2025
TKinter — это одна из наиболее популярных библиотек для создания графических интерфейсов пользователей (GUI) в языке программирования Python. TKinter входит в стандартную библиотеку Python, что. . .
HTML5 в разработке мобильных приложений
InfoMaster 12.01.2025
Введение: Обзор роли HTML5 в мобильной разработке В современном мире мобильных технологий HTML5 стал ключевым инструментом для разработки кроссплатформенных приложений. Эта технология произвела. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru