OpenCV1.0项目大量使用cvBlob结构(函数参数,blob列表等)。

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

我在vc9项目中添加了一些成功的成员,直到发现二进制文件无法在发行模式下的IDE外部运行。它在某个地方的破坏期间崩溃(在项目内部执行时不崩溃)。

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

在rutime期间,mydouble用作数组:
blob.mydouble=new double [10];

在深入研究大型源代码之前,有任何一般性建议吗?

编辑:调试在IDE外部成功运行。

编辑2: CvSeq用作主要Blob列表容器:cvSeqPush(CvSeq*,CvBlob*)cvSeqRemove(CvSeq*,int)。未定义的行为在这里吗?

最佳答案

您是否应该能够扩展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];

关于c++ - EXE二进制文件仅在IDE外部崩溃,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16646748/

10-11 04:21