Вот почему (насколько я могу судить, учитывая то, что вы отправили)
Register *PReg;
PReg
недопустимо.Конечно, вы объявляете это, но никогда не инициализируете его, поэтому его значение неопределенно, а разыменование приводит к неопределенному поведению.Вам нужно new
или инициализировать его указателем из другого места.Простое объявление не выделяет память и не инициализирует ваш указатель.То же самое относится к любой переменной, которая не имеет статического пространства хранения, но даже если бы она была статической, указатель все равно был бы недействительным, если бы он не был инициализирован где-то до разыменования.
Register *PReg = new Register();
// use it...
delete PReg;
Честно говоря, выне следует разрабатывать свой код таким образом в C ++, если вы не знаете, что делаете.Посмотрите на RAII .Что касается вашего примера, я не вижу причин, по которым вы бы просто не использовали автоматическое хранилище.
void Foo() {
Register reg;
// use reg
} // reg goes out of scope, memory reclaimed
Кроме того, я понятия не имею, почему вы используете memset
для инициализации sp
.