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

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

22.09.2013, 17:09. Показов 1704. Ответов 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
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 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
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 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
18144 / 10728 / 2066
Регистрация: 27.09.2012
Сообщений: 27,026
Записей в блоге: 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
5499 / 4894 / 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
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru