Не понимаю, почему я получаю исключение: место чтения нарушения прав доступа 0x00000000 - PullRequest
1 голос
/ 19 апреля 2019

Я работаю над классом, который работает с c-строками, и я создал функцию-член, которая возвращает длину вызывающего объекта (который является c-строкой). Когда я запускаю код, я получаю Исключение, выданное в 0x0F63F6E0 (ucrtbased.dll) в Project5.exe: 0xC0000005: расположение чтения нарушения доступа 0x00000000. Я не могу понять, как это исправить. Я не совсем уверен, сколько кода мне нужно, но, надеюсь, приведенного ниже фрагмента будет достаточно.

MyString::MyString(const char* aString) //memberString is a    c-string object
{
    memberString = new char[length() + 1];
    strcpy(memberString, aString);
}

int MyString::length() //Exception gets raised here
{
    return strlen(memberString); //Exception gets raised here
}

1 Ответ

2 голосов
/ 19 апреля 2019

Ваша проблема в том, что

  • length() необходимо memberString для возврата размера сохраненных данных,
  • memberString необходимо создать length().

Я думаю, что ваш конструктор не должен полагаться на другие функции-члены.

А как насчет:

MyString::MyString(const char* aString) //memberString is a    c-string object
{
    memberString = new char[strlen(aString) + 1];
    strcpy(memberString, aString);
}
...