Я серьезно сомневаюсь, что ваша программа выдает исключение в строке:
*(carrier.CurrCount) = 2;
Хотя выбрасывание исключения, безусловно, допускает поведение, представляется гораздо более вероятным, что вы столкнулись с нарушением доступа, которое вызвалобыть убит операционной системой.
Проблема в том, что вы используете указатель, но ваш указатель не инициализирован, чтобы указывать на что-либо.Это означает, что результат разыменования указателя не определен.
В этой ситуации, похоже, вообще нет никакого преимущества в использовании указателя.Ваш член CurrCount работал бы так же хорошо, если бы он был просто int.