Как вы сказали, вы используете ITask* task; task->perform(a,b);
. Однако ITask* task;
только объявляет указатель на ITask, он не создает экземпляр. Итак, ваша функция-член perform
пытается записать в ячейку памяти, где думает total
, но на самом деле память не выделена для этой цели. Следовательно, сбой, который зависит от наличия линии this->total=time;
. Обратите внимание, однако, что тот факт, что он работает без этой строки, является чисто реализацией, поскольку по-прежнему не определено поведение для вызова нестатической функции-члена без экземпляра, то есть без действительного указателя this
.
Либо использовать
ITask task;
task.perform(a,b);
(чтобы создать ITask
локальной для функции) или
ITask* task = new ITask();
task->perform(a,b);
//later deallocate:
delete task;
(создать ITask
, который живет, пока вы не вызовете delete
). Оба создают реальные объекты.
Проблема в другом месте ... – ravi
У вас есть недопустимый указатель на 'ITask', и вы вызываете функцию, используя это. – molbdnilo
Проблема не воспроизводится с опубликованным кодом. Пожалуйста, напишите полный пример. –