В моем классе, у меня есть - среди прочего - указатель:Работа с доступом к нулевому указателю
Class GSM
{
//...
private:
char *Pin;
//...
}
Мой конструктор инициализирует его как:
GSM::GSM()
{
//...
Pin = NULL;
//...
}
Теперь я хочу, чтобы установить значение по умолчанию («1234») на мой PIN-код. Я пробовал очень простой способ:
bool GSM::setDefaultValue()
{
lock();
Pin = "0";
for (uint8 i =0; i < 4; ++i)
{
Pin[i] = i+1;
}
unlock();
return true;
}
Но это не сработало. Когда я запускаю мою программу (я использую Visual Studio 2010) есть ошибка:
Access violation writing location 0x005011d8
Я попытался удалить линию
Pin = "0";
Но это не помогло. Я должен инициализировать его как NULL в конструкторе. Это часть более крупного проекта, но я думаю, что код выше - это то, что заставляет меня беспокоиться. Я все еще довольно новичок в C++/OOP, и иногда я все еще запутался указателями.
Что мне делать, чтобы улучшить код и способ, которым я думаю?
EDIT: В соответствии с запросом, я должен добавить, что я не могу использовать std :: string. Я стажер в компании, проект довольно большой (например, тысячи файлов), и я не видел никакого std здесь, и мне не разрешено использовать его.
Вам нужно сделать 'Pin' точку массив 'char', на который вы можете написать. Кстати, это не имеет ничего общего с ООП. – juanchopanza
Почему вы игнорируете предупреждения своего компилятора и сразу переходите к переполнению стека? Там много автоматизированной диагностики, которая может помочь вам, не требуя внимания человека. –
Почему вы не используете 'std :: string' или' boost :: optional ', если вам нужно отличить строку от пустой строки? В любом случае ... если вы хотите использовать указатель, вам нужно указать его на некоторый массив символов 'new'-ed - или, возможно, класс-член класса, - прежде чем пытаться перезаписать его. –