Добрый день, Пожалуйста, кто-нибудь может помочь? Я пытаюсь перевернуть элемент, представляющий собой массив указателей.C++ обратная строка
string::string(char *c)
{
int i =0;
while ((c[i] != '\0'))
{
i++;
}
_lenght= i;
_aString=*&c;
}
void string::reverse() //Requirements specify to have this argument
{
for(int i=0; i<_lenght/2; i++)
{
std::swap(_aString[i], _aString[_lenght-i-1]);
}
}
У меня возникает ошибка времени выполнения.
Это моя основная функция
int main(){
string a;
std::cout << "a is " << a << "\n";
string b("12345");
string c("12345",3);
std::cout << "c is " << c << "\n";
c = a;
a = b;
std::cout << "a is " << a << "\n";
b.reverse();
std::cout << "a is " << a << "\n";
return 0;
}
Ошибка я получаю
Необработанное исключение при 0x00fd6710 в UnisaLesson1.exe: 0xC0000005: Нарушение прав доступа месте для записи 0x00fdfd08.
Извините, я все еще новичок.
'std :: reverse (_aString, _astring + length);', где длина не включает нулевой ограничитель. – juanchopanza
'_aString' был установлен (как ни странно) копией указателя' c' и, вероятно, указывает на то, что было уничтожено, или (константный) строковый литерал. Но не видя, что именно 'c' указал на то, когда была создана строка, мы можем только догадываться. Попробуйте написать минимальный, но полный тестовый пример, чтобы продемонстрировать проблему. –
Вам нужно выделить память в конструкторе и скопировать массив символов, который вы передали. Не забудьте освободить деструктора. –