Удаление массива указателей на символы - PullRequest
1 голос
/ 09 октября 2011

Я хочу удалить массив char *, который должен быть простым, верно? char * = new char[length]; затем используйте delete[] char;?

Кроме того, я не могу использовать std::string для этого упражнения.

Я получаю эту ошибку:

ОБНАРУЖЕНА КОРРУПЦИЯ КАРТЫ: после блока Normal (# 137) 0x00794B50.
CRT обнаружил, что приложение записало в память после завершения буфера кучи.

Вот мой код:

class myClass
{
    char * myString;
    ...
public:
    myClass::myClass( const char * tempStr);
};

myClass::myClass( const char * tempStr)
{
    int length = strlen(tempStr);
    myString = new char(length + 1); //+1 for null char
    strcpy(myString, tempStr);
    myString[length] = '\0';
    delete[] myString; //error occurs here
}

Теперь, я знаю, этот код совершенно непрактичен, однако он по-прежнему выдает ту же ошибку, которую я пытаюсь решить, поэтому, если мы сможем решить эту проблему, тогда я буду радостно идти своим путем. Из того, что я прочитал, это должно быть в порядке? Я повторюсь, для этого упражнения я не могу использовать std::string.

1 Ответ

7 голосов
/ 09 октября 2011

Вы перепутали скобки. Должно быть:

myString = new char[length + 1];

Квадратные скобки создадут массив. Обычные скобки будут выделять только один с любым конструктором, принимающим этот один операнд.

...