Вы должны использовать std::vector
вместо вашего динамического массива, и я подозреваю, что ваша проблема исчезнет очень быстро.
Как рекомендует MadCap, вы также должны использовать общие указатели, так как это лучший способ при использовании указателей с контейнером. Также это даст вам ожидаемую семантику копирования.
Это сведет на нет необходимость в этом:
for (int i = 0; i < 50; i++)
fields[i] = NULL;
и вы можете заменить это:
for (int i = 0; i < scr.numOfFields; i++)
fields[i] = scr.fields[i];
с помощью std :: copy, что-то вроде:
fields.clear()
std::copy(scr.fields.begin(), scr.fields.end(), fields.begin());
Этим вы устраните возможность возникновения сбоя из-за некоторого доступа к указателю или ошибки инициализации.
Простой совет есть; прекратите использование динамических массивов и необработанных указателей и начните использовать std::vector
и boost::shared_ptr
, вместо этого выполнение этого поможет предотвратить возникновение подобных проблем.