ハマり記録
まぁ,なんというか当たり前といえば当たり前なんだけど,スコープを広く持たせるあるクラス(例えば行列のクラスとか)のコンストラクタとして別のデータ元を指定したりするとき,その変数がメソッドとか関数内のローカル変数だった場合,その関数を抜けるとそのクラスの値もおかしくなる.
コーディング中にこれってよくないよな…と思いつついつの間にか忘れてそのままになってた.
具体的な例はこんな感じ.
class test { public: test(); loop(); private: Mat *matrix; void initMat(); }; test::test() { initMat(); } void test::initMat() { float a[100]; for (int i = 0; i < 100; i++) { a[i] = (float)i; } matrix = new Matrix(10, 10, CV_32FC1, a); }
解決策としては,データ元(上で言うfloat a[100])をstaticにするのが一番スマートなんだろうか…