Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
7 / 7 / 2
Регистрация: 25.12.2011
Сообщений: 111

При вызове деструктора возникает ошибка Debug Assertion Failed!

22.09.2013, 17:09. Показов 1752. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
вот код программы
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
#include <iostream>
#include <conio.h>
 
using namespace std;
 
class String
{
private:
    char *str;
public:
    String (char *ustr)
    {
        str = new char [80];
        str = ustr;
    }
    void Print()
    {
        cout<<"String is:   "<<str;
    }
    ~String()
    {
        cout<<"Destrukcor";
        delete [] str;
    }
};
 
void main()
{
    String user("User string");
    user.Print();
}
При вызове деструктора возникает ошибка
Debug Assertion Failed!
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.09.2013, 17:09
Ответы с готовыми решениями:

Ошибка при выводе в текстовый файл (Debug assertion failed)
Значит, такая ситуация: Надо с помощью разложения в ряд Тейлора посчитать арктангенс и вывести результаты в текстовый файл, при чем...

ошибка debug assertion failed
при выполнении программы происходит ошибка debug assertion failed, а именно попытке завершить работу программы вот код #define...

Ошибка Debug Assertion Failed
Доброго времени суток, срочно нужна помощь, такая проблема: есть программа шифрования методом Гронсфельда по английскому алфавиту, для...

8
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
22.09.2013, 17:11
C++
1
2
str = new char [80];
str = ustr;
утечка памяти, плюс UB при попытки освободить, т.к. ustr в данном случае содержит адрес строкового литерала
C++
1
2
str = new char [strlen(ustr)+1];
strcpy(str,ustr) ;
2
7 / 7 / 2
Регистрация: 25.12.2011
Сообщений: 111
22.09.2013, 19:26  [ТС]
Все работает, спасибо!
А почему не выводится сообщение в деструкторе?
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
22.09.2013, 19:29
Цитата Сообщение от vozup Посмотреть сообщение
А почему не выводится сообщение в деструкторе?
Потому что деструктор вызовется после выхода из main и Вы ничего не увидите просто
Запустите из под консоли, либо
C++
1
2
3
4
5
6
7
8
int main()//int main
{
   {
    String user("User string");
    user.Print();
   }
   //здесь паузу поставить.
}
Если в студии, то можно ctrl+F5
0
7 / 7 / 2
Регистрация: 25.12.2011
Сообщений: 111
22.09.2013, 19:43  [ТС]
Вот програма побольше
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
#include <iostream>
#include <conio.h>
 
using namespace std;
 
class Person
{
private:
    int age;
    char *name;
    char *state;
    int tel_number;
public:
    Person()
    {
        age = 0;
        tel_number = 0;
        name = new char[15];
        state = new char[15];
        name = "No information";
        state = "No information";
    }
    Person(char *uname, char *ustate, int age, int tel_number)
    {
        name = new char[strlen(uname)+1];
        state = new char[strlen(ustate)+1];
        this ->age = age;
        this ->tel_number = tel_number;
        strcpy(name,uname);
        strcpy(state,ustate);
    }
    ~Person()
    {
        delete [] name;
        delete [] state;
        cout<<"End of destructor";
    }
    void Print();
    Person ChangeName();
};
 
void Person::Print()
{
        cout<<"Name: "<<name<<endl;
        cout<<"State: "<<state<<endl;
        cout<<"Age: "<<age<<" years old"<<endl;
        cout<<"Telephon number is: "<<tel_number<<endl;
}
 
Person Person::ChangeName()
{
    cout<<"Enter new name: ";
    cin>>name;
    return *this;
}
 
int main()
{
    Person adam("Name","state",12,555666);
    adam.Print();
    adam.ChangeName().Print();//Смена имени
    getch();
    return 0;
}
Такая же беда, имя меняется, выводится но по выходу с программы таже ошибка
0
Неэпический
 Аватар для Croessmah
18149 / 10731 / 2067
Регистрация: 27.09.2012
Сообщений: 27,035
Записей в блоге: 1
22.09.2013, 19:56
Цитата Сообщение от vozup Посмотреть сообщение
Такая же беда
такая же ошибка:
C++
1
2
3
4
        name = new char[15];
        state = new char[15];
        name = "No information";
        state = "No information";
Цитата Сообщение от Croessmah Посмотреть сообщение
утечка памяти, плюс UB при попытки освободить, т.к. Вы присваиваете указателям адреса строковых литералов
Почитайте что-нибудь о Си-строках

Добавлено через 4 минуты
C++
1
2
3
4
5
6
        char * pNoInfoStr = "No information" ;
        size_t  sizeNoInfoStr = strlen ( pNoInfoStr ) + 1 ;
        name = new char[sizeNoInfoStr];
        state = new char[sizeNoInfoStr];
        strcpy ( name , pNoInfoStr ) ;
        strcpy ( state , pNoInfoStr ) ;
Добавлено через 1 минуту
C++
1
2
3
4
5
6
Person Person::ChangeName()//Возвращение без ссылки приведет к созданию нового объекта, только вот не похоже, что здесь нужна копия
{
    cout<<"Enter new name: ";
    cin>>name; //имя может быть длиннее предыдущего и может вылезти за пределы выделенной памяти
    return *this;
}
1
7 / 7 / 2
Регистрация: 25.12.2011
Сообщений: 111
22.09.2013, 20:56  [ТС]
Спасибо большое!
0
0 / 0 / 0
Регистрация: 08.02.2013
Сообщений: 35
23.12.2013, 01:18
А мне можете помочь? у меня тоже такая проблема, только сделано вроде все, как вы говорите. Проблема в деструкторе:
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
\
#include "stdafx.h"
#include <iostream>
#include <cstring> // для strcpy
using namespace System;
using namespace std;
class Student
{
public:
    char *name;
    int course;
    bool gender;
    Student();//конструктор без параметров
    Student(char *pname, int pcourse, bool pgender)//конструктор с параметрами
    {
        name= new char[strlen(pname)+1];
        strcpy(name, pname);
        course=pcourse;
        gender=pgender;
        cout<<"Parameterized constructer has operated"<<endl;
    };
    Student(const Student& ref)//конструктор копирования
    {
        name= new char[strlen(ref.name)+1];//теперь name ссылается на пустой массив(выделение памяти)
        strcpy(name, ref.name);
        course = ref.course;
        gender=ref.gender;
        cout<<"Copying constructer has operated"<<endl;
    };
    ~Student()//деструктор класса Student
    {
        delete name;
        cout<<"Destructor has operated"<<endl;
    }
    void Print()//вывод на экран информации о студенте
    {
        char cgender[10];
        if (gender) strcpy(cgender, "Male");
        else strcpy(cgender, "Female");
        cout<<"Name: "<<name<<" Course: "<<course<<" Gender: "<<cgender<<endl;      
    }
    void SetCourse(int c)//функция для установки значения курса студента
    {
        course =c;
    }
    void SetName(char* c)//функция для установки значения имени студента
    {
        strcpy(name,c);
    }
    void SetGender(bool c)//функция для установки значения пола студента
    {
        gender = c;
    }
 
};
int main()
{
    Student st1("Dima", 3, true);
    Student *stref1=&st1; // указатель на экземпляр класса
    stref1->Print();
 
    Student st2=st1;// вызов конструктора копирования
    stref1=&st2; // смена значения адреса у stref1 на адрес st2
    
 
    void(Student::*stref2)(); // указатель на компоненту-функцию
    stref2=&Student::Print;
    (st1.*stref2)(); //вызов метода Print() через указатель stref2
    delete stref1;// вызов деструктора
    system("pause");
    return 0;
}
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
23.12.2013, 01:44
C++
1
delete [] name;
Цитата Сообщение от Mukue Посмотреть сообщение
delete stref1;// вызов деструктора
stref1 разве связан с динамической памятью? Если нужно увидеть сообщение о работе деструктора, поместите код в main()(до system("pause")) в {}.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.12.2013, 01:44
Помогаю со студенческими работами здесь

Ошибка выполнения: Debug assertion failed
Возникла такая ошибка,никто не сталкивался? Читал что-то про нее,но что-то непонятно... Может кто сталкивался или знает как исправить? ...

Ошибка компиляции (Debug Assertion Failed)
Ребят помоги, что не так в этом коде? Выдает вот эту ошибку http://i051.***********/1307/bf/dffff7cb08e5.png #include...

Ошибка debug assertion failed, как избавиться?
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;string.h&gt; #include &lt;conio.h&gt; #include &lt;stdlib.h&gt; #define n 50 #include...

Ошибка debug assertion failed . line 1772
Всем привет, недавно занялась параллельным программированием, столкнулась с рядом проблем, которые постепенно решала до этих самых пор-...

Debug Assertion Failed при освобождении памяти
Простая программка вылетает с ошибкой Debug Assertion Failed. Код вот такой: #include &lt;iostream&gt; int main() { char* str...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка SDL3 и Box2D из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru