このプログラムで破損したヒープ エラーが発生する理由がわかりません (クラスに OpenCV を使用しています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();
オブジェクトのコピーを返すことは、C++ では参照よりも洗練されていると読みました。だから私は何が間違っているのか知りたいです。
編集: Visual Studio は中断しa->decode(vect)
ますが、参照ではなくオブジェクトを返す場合にのみ発生します。
編集 2: プログラム全体を反映するようにコードを編集しました。a
問題は、コピーと変更が同時に行われる共有オブジェクトにあると思います。ミューテックスを使用して問題が引き続き発生するかどうかを確認します。