Удаление указателя с помощью delete[] C++

233
24 июля 2017, 15:23

Добрый день. Хотелось бы узнать, в чем проблема. Есть простой (ужасный) код для примера

class STRING_REPLACE
{
private:
    char* stringObj;
    int length=0;
public:
    STRING_REPLACE()
    {
        cout << "Creating STRING_REPLACE object\n";
        char* stringObj = new char[5];
        strcpy(stringObj, "FFFF\0");
        length = 5;
        cout << stringObj << endl;
    }
    int getLength()
    {
        return this->length;
    }
    void setString(std::string obj,int length)
    {
        delete[] stringObj;
        //stringObj = new char[length+1];
        //strcpy(this->stringObj, obj.c_str());
    }
    void getString()
    {
        cout << stringObj << endl;
    }
};
};

Почему в данном примере программа вылетает при вызове функций setString,getString?

Прошу не кидаться камнями за такой код. Такая реализация сделана умышленно.

Answer 1

Потому что в конструкторе вы изволите выделять память, и полученный указатель совать в локальную переменную.

char* stringObj = new char[5];

А надо:

stringObj = new char[5];
READ ALSO
C++, Вызов виртуального метода после завершения конструктора суперкласса

C++, Вызов виртуального метода после завершения конструктора суперкласса

Слегка отрефакторил код своей библиотечки сетевого обменаОбсуждаемая часть - классы запросов и ответов

351
Спецификатор формата для типа bool в fwscanf

Спецификатор формата для типа bool в fwscanf

Как считать данные типа bool из файла при помощи fwscanf? Какие спецификаторы использовать?

271
WinAPI, рассчитать ширину шрифта для TextOut

WinAPI, рассчитать ширину шрифта для TextOut

Как правильно рассчитать точную ширину выводимого символа текущего шрифта, чтобы вывести текст с помощью TextOut в рабочее окно? Делаю для полосы...

264
Время выполнения функций

Время выполнения функций

Вот, я создал constexpr функциюКак точно определить, выполнится она во время компиляции или в runtime?

208