Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 21.07.2022
Сообщений: 17

Почему delete вызывает ошибку?

04.08.2022, 16:19. Показов 527. Ответов 3

Студворк — интернет-сервис помощи студентам
На дистанционке не приняли код на C++.

Почти переделал, но есть непонятный момент

Среда - Microsoft Visual C++ 6.0
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
class Car{
  private:
    char* marka; //марка авто
    int power; //мощность двигателя в кВт
    float cost; //стоимость в тыс. $
    int displacement; //объём двигателя
  public:
    void setData(char* m, int pw, float p, int dis) {
      marka = m;
      power = pw;
      cost = p;
      displacement = dis;
    }
    std::string getData() {
      string to_return = "Marka is ";
      to_return += marka;
        return to_return;
    }
  public:
    Car(char* m = "Renault", int pw = def_power, float p = def_price, int dis = def_displacement){ //создание объекта по умолчанию
      marka = m;
      power = pw;
      cost = p;
      displacement = dis;
    };
  public:
    void Print(){ //вывод параметров на экран
      cout << getData() << endl;
      cout << "Price equals " << cost << " thousand $" << endl;
      cout << "Power equals " << power << " kW" << endl;
      cout << "Displacement equals " << displacement << " cm3" << endl;
    };
    void Input(); //функция ввода параметров, ещё не определена
    };
 
void Car::Input(){ //функция ввода параметров
        char *marka_ = new char; //создаём динамический объект marka
        std::cout << "Input mark: "; //введите марку авто
        std::cin >> marka_;
        std::cout << std::endl;
 
    do{
        std::cout << "Input power (kW): "; //введите мощность авто в кВт
        std::cin >> power;
    } while(power < 0);
        std::cout << std::endl;
 
    do{
        std::cout << "Input cost (thousand $): "; //введите стоимости авто в тыс. $
        std::cin >> cost;
    } while(cost < 0);
        std::cout << std::endl;
 
    do{
    std::cout << "Input displacement (cm3): "; //введите объём двигателя в см3
        std::cin >> displacement;
    } while(displacement < 0);
        std::cout << std::endl;
 
        Car ipnut; //создание нового объекта
    ipnut.setData(marka_,power,cost,displacement);
    ipnut.Print(); //вывод параметров объекта на экран
    delete marka_;
    };
Строчка delete marka_ вызывает ошибку

DAMAGE: after Normal block (#80) at 0x008C1990

Всё это при том, что в основном cpp файле удаление динамических объектов работает.

Кроме того, хотелось бы на всякий случай сделать проверку, введено ли число.

А ещё написали "Разделяйте код заголовочных файлов .h, реализацию методов сделайте в соответствующих cpp-файлах".
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
04.08.2022, 16:19
Ответы с готовыми решениями:

fin>> вызывает ошибку
Здравствуйте. Стоит задача в заполнении документа рандомными числами в диапазоне , и замене каждого второго отрицательного числа на среднее...

Объявление вызывает ошибку
1. где объявлять глобальные константы и переменные? в файле с ароматом .h? 2.Объявление extern fstream AccFile; вызывают ошибку ...

Resize вектора вызывает ошибку
std::vector&lt;MyClass*&gt; vec; vec.resize(1, NULL) vec = new MyClass(); vec.resize(5, NULL); // Тут возникает ошибка Ошибка в...

3
 Аватар для programmer_08
687 / 444 / 209
Регистрация: 18.10.2020
Сообщений: 1,606
04.08.2022, 16:29
Цитата Сообщение от MaratPython Посмотреть сообщение
char *marka_ = new char; //создаём динамический объект marka
        std::cout << "Input mark: "; //введите марку авто
        std::cin >> marka_;
        std::cout << std::endl;
если у вас марка авто состоит из одного символа - зачем динамическое выделение памяти?
Цитата Сообщение от MaratPython Посмотреть сообщение
void setData(char* m, int pw, float p, int dis) {
      marka = m;
      power = pw;
      cost = p;
      displacement = dis;
    }
здесь должно быть const char* и должна быть операция копирования, а не присваивания... в общем бред какой-то
1
0 / 0 / 0
Регистрация: 21.07.2022
Сообщений: 17
04.08.2022, 16:36  [ТС]
Спасибо, ваш ответ навёл на решение главной проблемы - изменил просто char (в объявлении переменной marka_) на char[16]
0
 Аватар для programmer_08
687 / 444 / 209
Регистрация: 18.10.2020
Сообщений: 1,606
04.08.2022, 16:42
тогда теперь delete[] marka_;
передавать в функции теперь const char*;
вместо cin >> юзать cin.getline() вместо = для char* использовать, допустим strcpy()
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
04.08.2022, 16:42
Помогаю со студенческими работами здесь

Перечисление в классе вызывает ошибку
#pragma hdrstop #include &lt;iostream.h&gt; #include &lt;conio.h&gt; #include &lt;tchar.h&gt; ...

Шаблон класса деструктор вызывает ошибку
Не так чего после того как доходит до деструктора выдает такую ошибку #include &quot;stdafx.h&quot; #include &lt;stdio.h&gt; ...

Заполнение двумерного вектора вызывает ошибку
Алгоритм находит компоненты сильной связности в графе. Всё бы хорошо, но строка с &quot;g.push_back(b);&quot; вызывает ошибку. В чём дело?...

Много поточность вызывает ошибку счета
Хотел реализовать многопоточность в коде для ускорения счета и столкнулся со следующим. Естественно сначала испытывал последовательный код...

Функция компилируется, но вызывает виндовс ошибку
int main() int r=replace(str, c1, c2); return 0; int replace(char *str, char c1, char c2) { int count=0; ...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru