Ваша программа имеет неопределенное поведение из-за следующей функции:
FloatTensor operator * (FloatTensor two) {
MultiplyOperation ope(this,&two);
this->frontOperation = &ope;
return this->frontOperation->compute();
}
Вы храните указатель на объект ope
, который больше не действителен после возврата из функции.
Та же проблема существует с использованием two
при создании ope
.
Вы можете изменить функцию для хранения указателя на динамически размещенный объект для решения этой проблемы.
FloatTensor operator * (FloatTensor two) {
this->frontOperation = new MultiplyOperation(this, new FloatTensor(two));
return this->frontOperation->compute();
}
или используйте
FloatTensor operator * (FloatTensor& two) {
this->frontOperation = new MultiplyOperation(this, &two);
return this->frontOperation->compute();
}
Обратите внимание, что будет лучше использовать умные указатели вместо необработанных указателей.В противном случае ваша программа по-прежнему может столкнуться с проблемами, связанными с памятью.