Что делать, если выскакивает точка останова при освобождении памяти delete[] name?

Что делать, если выскакивает точка останова при освобождении памяти delete[] name? Я новичок в с++ введите сюда описание изображения

Ship.cpp файл:

#include "Ship.h"

Ship::Ship(const char* Name, const char* Type, int Displ)
{
    name = new char[strlen(Name) + 1];
    strcpy(name, Name);
    type = new char[strlen(Name) + 1];
    strcpy(type, Type);
    displ = Displ;
    cout << "Вызван конструктор с параметрами" << endl;
}

Ship::~Ship()
{
    delete[] name;
    delete[] type;
    cout << "Вызван деструктор" << endl;
}

void Ship::SetName(char* Name)
{
    name = Name;

}

void Ship::Show()
{
    cout << "Ship: " << name << endl;
}

Ship.h заголовочный файл:

#pragma once
#include <iostream>
#include <cstring> 
using namespace std;

class Ship
{
    char* name;
    char* type;
    int displ;
public:
    Ship(const char* Name, const char* Type, int Displ);
    ~Ship();
    void SetName(char* Name);
    void Show();
};

cpp файл с main:

#include <iostream>
#include "Ship.h"
using namespace std;

int main()
{
    setlocale(LC_ALL, "ru");
    Ship ship2("Титаник", "Лайнер", 52310);
    ship2.Show();
    char Name[] = "Кит"; 
    ship2.SetName(Name);  
    ship2.Show();
   
}

Ответы (1 шт):

Автор решения: Mikhailo

Вы пытаетесь удалить неудаляемое. Вам надо копировать строку, только и всего. А старую удалять, а то у вас течка памяти...

void Ship::SetName(char* Name)
{
    delete[] name;
    delete[] type;
    name = new char[strlen(Name) + 1];
    strcpy(name, Name);
}
→ Ссылка