スタックオーバーフローの回避
解決したいこと
スタックオーバーフローを防ぎたいです。
C++/CLIで画面遷移を繰り返すと特定の回数繰り返したところで、
スタックオーバーフローが起きて停止してしまいます。
解決方法を教えて下さい。
またはスタックがどれだけ溜まるのか、溜まったのかを知りたいです。
該当するソースコード
private: Bitmap^ mat2bmp(cv::Mat img)
{
const int alignedCols = static_cast<int>(cv::alignSize(img.cols, 4));
cv::Mat alignedMat = cv::Mat(img.rows, alignedCols, img.type());
mSrc = cv::Mat(alignedMat, cv::Rect(0, 0, img.cols, img.rows));
img.copyTo(mSrc);
Bitmap^ bmp = gcnew Bitmap(mSrc.cols, mSrc.rows,
static_cast<int>(mSrc.step),
System::Drawing::Imaging::PixelFormat::Format24bppRgb, IntPtr(mSrc.ptr()));
return bmp;
}
private: System::Void MyForm_Activated(System::Object^ sender, System::EventArgs^ e) {
button2->Enabled = false;
mPlayFlag1 = true;
Thread ^threadF = gcnew Thread(gcnew ThreadStart(this, &MyForm::threadFuncF)); // スレッドを用意
threadF->Start();
textBox2->Text = RQEST_OFF.ToString();
}
//スレッドF st
public: System::Void threadFuncF() {
//デリゲート5実行
BeginInvoke(
gcnew sampleDelegate5(this, &MyForm::execDele5)); //sampleDelegate5のインボーク開始
cv::waitKey();
}
// デリゲート5
public: delegate System::Void sampleDelegate5(); //デリゲートの関数をsampleDelegate5とする
public: System::Void execDele5() //try //
{
int a = 0;
while (mPlayFlag1) {
textBox1->Text = QUANSHW_VAL.ToString();
color_r3 = cv::Mat(color_r2, cv::Rect(225, 32, 454, 454 )); //領域切出し
rotate(color_r3, color_r4, cv::ROTATE_90_COUNTERCLOCKWISE);
resize(color_r4, color_r5, cv::Size(), 1.5, 1.5); //カラー画像をリサイズ 元(896,504)1.4(1254,706)
pictureBox1->Image = mat2bmp(color_r5); //リサイズした画像を表示
Sleep(100);
cv::waitKey();
}
return ;
}
private: System::Void button2_Click_1(System::Object^ sender, System::EventArgs^ e) {
mPlayFlag1 = false;
MyForm7^ Frm7 = gcnew MyForm7();
this->Visible = false; //画面を消す
Frm7->ShowDialog(this);
}
### 自分で試したこと
スタック容量は増やしましたが切り替え回数が増えるだけでした。
Frm7->ShowDialog(this);
を
Frm7->Show(this);
に変更したら特定の回数は越える事が出来ましたがスタックオーバーフローが起きないか自信がありません。
解決方法等アドバイスがあれば教えてください。
0 likes