1

OpenCV1.0 プロジェクトでは、cvBlob 構造が頻繁に使用されます (関数パラメーター、BLOB のリストなど)。

struct CvBlob{
    float   x,y,w,h;
    int     ID; }

リリース モードで IDE の外でバイナリを実行できないことが判明するまで、vc9 プロジェクト内にいくつかのメンバーを追加して成功しました。どこかで破壊中にクラッシュします(プロジェクト内で実行するとクラッシュしません)。

新しい構造:

struct CvBlob{
    float   x,y,w,h;
    int     ID,myint; //Works fine.
    double* mydouble; //Crushes only outside visual studio.
}

ランタイム中mydoubleは、配列として使用されます。

blob.mydouble=new double [10];

大きなソースコードに飛び込む前に、一般的なアドバイスはありますか?

編集:デバッグは IDE の外部で正常に実行されます。

EDIT2: CvSeq は、メインの blob リスト コンテナーとして使用されます: cvSeqPush(CvSeq*,CvBlob*), cvSeqRemove(CvSeq*,int). ここで未定義の動作?

4

2 に答える 2

2

構造を拡張し、CvBlob独自のコンストラクタとデストラクタを追加してメモリを管理することはできませんmyDoubleか?

  struct MyCvBlob : CvBlob {
       double* myDouble;
       // initialize myDouble to NULL in constructor
       MyCvBlob() {
          myDouble = NULL;
       }
       // free the memory pointed to by myDouble if in use
       virtual ~MyCvBlob() {
          if(myDouble) {
             delete [] myDouble;
          }
       }
  };

  MyCvBlob blob;
  blob.myDouble = new double[10];
于 2013-05-21T11:20:55.560 に答える