Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
 Аватар для Gubila_2000
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1

Ошибки во время работы деструкторов

07.03.2019, 18:14. Показов 3638. Ответов 47

Студворк — интернет-сервис помощи студентам
Здравствуйте. Я давно не писал на плюсах, поэтому мог подзабыть как работать с указателями.

В общем есть 2 класса.

Первый хранит массив и его параметры

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
class Word
{
   int *word;
   double *vector;
   int sizeWord;
   int sizeVector;
   
   Word(int *word=nullptr, double *vector = nullptr);
   ~Word();
              
 
}
 
Word::~Word()
{
     if (this->word)
          delete [] word;
     if (this->vector)
          delete [] this->vector;
}
Второй хранит массив указателей на этот класс с другими параметрами

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class WordList
{
      Word *words;
 
      WordList(Word *words = nullptr);
      ~WordList();
}
 
WordList:~WordList()
{
       if (this->words)
           delete []  this->words;
}
И есть внешняя функция, которая создает второй класс, проводит вычислительные операции и удаляется.

C++
1
2
3
4
5
6
void main()
{
    WordList *wl = new WordList();
    int result = wl->calc();
    delete wl;
}
Программа вылетает когда запускается деструктор класса Word на строчке удаления его массива. Если же я удаляю код во всех деструкторах, то программа работает правильно, а класс все считает.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.03.2019, 18:14
Ответы с готовыми решениями:

Ошибки в программе с использованием конструкторов/деструкторов
Приветы Есть код: #include <iostream> #include <cmath> #include <stdlib.h>

Ошибки во время работы
После случайного удаления папки gridlayout_v7 и других манипуляций, при запуске вылетает куча ошибок: 05-13 23:24:35.188:...

Стали выпадать ошибки разных приложений во время работы
Здравия желаю, коллеги! На предприятии ПК с рабочей базой 1С в сети живёт в режиме 24/7 бухгалтер в течении дня работает, недавно...

47
 Аватар для Gubila_2000
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1
16.03.2019, 16:21  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от zayats80888 Посмотреть сообщение
и передавать крупные структуры лучше по ссылке или константной ссылке
Моя проблема пока заключается в правильной работе деструкторов, поэтому я избавился и от ссылок, чтобы было проще выявить причину.
0
 Аватар для zayats80888
6354 / 3525 / 1428
Регистрация: 07.02.2019
Сообщений: 9,008
16.03.2019, 16:24
в отладчике посмотрите из каких функции(по иерархии вызовов) срабатывает исключение
0
 Аватар для Gubila_2000
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1
16.03.2019, 16:28  [ТС]
zayats80888, ошибка, как я понял, заключалась в вашем первом замечании. Когда я избавлялся от указателей, правил только те строчки, которые мне выделял QtCreator. Эту строчку он, почему-то, съел и не подавился.

Цитата Сообщение от zayats80888 Посмотреть сообщение
стр. 181 - зачем там выделение памяти?
Это осталось с того времени как я боролся с указателями. Смысл был в возвращении скопированного значения, а не ссылки/указателя
0
19506 / 10109 / 2464
Регистрация: 30.01.2014
Сообщений: 17,834
16.03.2019, 16:55
Добавлено через 4 минуты
Строки

Цитата Сообщение от Gubila_2000 Посмотреть сообщение
C++
1
Vec<Word> *words; Vec<int> *IDs;
Тоже нужно исправить. Раз вы память перестали для них выделять вручную, то и объекты тут должны быть по значению.
1
 Аватар для Gubila_2000
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1
16.03.2019, 17:38  [ТС]
Цитата Сообщение от Croessmah Посмотреть сообщение
Вы уверены, что Вы пишите вектор?
К слову, об этом. Есть какой-то не сложный способ сделать так, чтобы в дебаггере были видны все элементы вектора? Или для этого придется все таки поразбираться в коде std::vector?
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
16.03.2019, 18:41
Gubila_2000, здесь дело не в устройстве std::vector, а в том, что это вектор из стандартной библиотеки. На что же указывают ваши указатели и как их интерпретировать отладчик в общем случае не знает. А отладчик какой? В отладчике могут быть инструменты для решения подобной проблемы.
0
Мозгоправ
 Аватар для L0M
1745 / 1039 / 468
Регистрация: 01.10.2018
Сообщений: 2,138
Записей в блоге: 2
16.03.2019, 19:22
Gubila_2000, сделайте консольное приложение, демонстрирующее вашу проблему. Заверните проект в архив вместе с тестовыми данными (если они в отдельном файле) и выложите здесь. Тогда можно будет погонять ваше изделие под отладчиком и посмотреть что и где не так работает.
0
 Аватар для Gubila_2000
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1
16.03.2019, 20:24  [ТС]
L0M, да я уже решил проблему, на которую указал zayats80888, и пока проблем нет.

Croessmah, дебаггер, вроде бы, от msvs 2017 ставил
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
16.03.2019, 20:24

Ноутбук все время виснет,завершение работы, не отвечает, ошибки выдает
всем привет, люди помогите пожалуйста, у меня ноутбук- все время виснет,завершение работы, не отвечает, ошибки выдает что делать? заранее...

На моем компе во время установки игры часто возникают ошибки, зависания и ошибки копирования файлов с установочного диска.
Добрый вечер! На моем компе во время установки игры часто возникают ошибки, зависания и ошибки копирования файлов с установочного диска....

Посчитать время события - время работы кассиров (система массового обслуживания)
Есть программа, моделирующая следующую задачу (система массового обслуживания): В бухгалтерии предприятия имеются два кассира, каждый...

Выводить текущее время в определенные позиции консоли во время работы
Портирую консольное приложение. Есть код, который работал после компиляции в BC++ 3.1, после компиляции под MinGW GCC программа не...

Вывести время работы системы и перезагрузить её, если время превысило заданное значение
Собственно говоря нужно в powershell написать скрипт, выводящий время работы системы и отправляющий систему в перезагрузку, если время...


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

Или воспользуйтесь поиском по форуму:
48
Ответ Создать тему
Новые блоги и статьи
Транслитерация текста с кириллицы на латиницу
Maks 11.11.2026
Решил облегчить жизнь себе и коллегам админам при создании электронных почтовых ящиков для пользователей, в результате написал обработку "Транслитерация текста" с кириллицы на латиницу, а в ней. . .
Книги по геймдизайну, левел-дизайну, игровым механикам и проектированию игрового опыта
8Observer8 08.11.2026
Содержание блога | English Version 1. 2003 - 06 - Designing Virtual Worlds (1st Edition) Автор: Richard A. Bartle | Объем: 768 стр. Ссылки: Amazon . . .
Родители токсичные абьюзеры по отношению к своим детям ругают их оскорбляют не любят
zorxor 08.11.2026
Жить в атмосфере постоянных оскорблений, критики и холодности со стороны родителей — это тяжелое и болезненное испытание, которое оставляет глубокие эмоциональные раны. Токсичное и абьюзивное. . .
Как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Ответ от Джемени ИИ.
zorxor 08.11.2026
Джемени, как только я захожу к себе в свою комнату я сразу же с себя снимаю свои трусы. Многие люди, возвращаясь домой, сразу переодеваются в максимально свободную одежду или вовсе предпочитают. . .
Паттерн очереди действий/команд (Action / Command Queue). Система очереди действий и кат-сцен с SDL3 Callbacks, cglm и OpenGL
8Observer8 07.11.2026
Содержание блога | English Version Руководство для начинающих по реализации паттерна очереди действий/ команд (Action / Command Queue) на C++ (C++20) с использованием официального SDL3 Callbacks. . .
Проверка полного ФИО в типовом справочнике
Maks 07.11.2026
Решение реализовано в конфигурации КА2, на примере справочника "КонтактныеЛицаПартнеров". Задача: Запрет инициалов. Не допускаеть использование сокращений вида "И. И. ", "И. И. ", "И И" и. . .
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru