Я не понимаю, почему я получаю поврежденную ошибку кучи с помощью этой программы (я использую OpenCV для класса Mat
):Почему куча коррупции при возврате объекта Mat?
class A {
private:
Mat image;
static UINT ThreadProc(LPVOID pParam) {
A* pThis= (ClientNetwork*)pParam;
UINT nRet= pThis->DoThreadProc(); // get out of 'static mode'
return(nRet);
}
UINT ClientNetwork::DoThreadProc() {
vector<uchar> vect;
while(1) {
/**** initialize vect and get the image data to decode ****/
decode(vect);
}
}
public:
void decode(const vector<uchar>& vectorData){image=imdecode(vectorData, CV_LOAD_IMAGE_COLOR);}
Mat get_image(){return image;}
void start() {m_pcThread= AfxBeginThread(ThreadProc, this);}
}
int main() {
A* a = new A();
a->start();
while(1) {
Mat image = a->get_image();
}
delete a;
return 0;
}
кажется, что ошибка приходит из Mat image = a->get_image();
, потому что если я возвращать ссылку вместо копии объекта, у меня нет ошибки больше:
Mat* get_image(){return ℑ}
и
Mat* image = a->get_image();
I г ead, что возвращение копии объекта более элегантно на C++, чем ссылка. Поэтому я хотел бы знать, что не так.
EDIT: Visual studio разбивается на a->decode(vect)
, но это происходит только тогда, когда я возвращаю объект, а не ссылку.
EDIT 2: Я отредактировал код, чтобы отразить всю программу. Я думаю, проблема возникает из общего объекта a
, который копируется и модифицируется одновременно. Я увижу, если проблема все еще происходит с использованием мьютекса.
Возьмите 'vector' по ссылке или const-ссылке. –
Ajay
@ Ajay У меня все еще есть ошибка.Передача по ссылке избегает копирования, но она удаляется в конце 'decode', правильно? – Seltymar
Это не ответ, но рекомендация. – Ajay