声明二维动态数组并从向量填充 我比较喜欢C++,使用OpenCV创建和训练一个SVM。但是,在使用trainAuto()方法时,内存位置0x0出现错误的访问错误。假设这是OpenCV这一事实并不重要,因为这是指针操作的问题。我现在的代码如下。它应该生成一个大小为numgs*NUMVECTORS的二维数组。请让我知道,如果你发现任何原因,我可能会失去记忆或分配不正确。。。仅供参考,numigs和NUMVECTORS分别为20和15000,因此这是一个非常大的浮动数组
因此,现在我得到EXC_算术代码=EXC_I386_DIV subcode=0x0,可能它正在尝试对数据集进行操作,但拒绝0个值项?这部分看起来可疑:声明二维动态数组并从向量填充 我比较喜欢C++,使用OpenCV创建和训练一个SVM。但是,在使用trainAuto()方法时,内存位置0x0出现错误的访问错误。假设这是OpenCV这一事实并不重要,因为这是指针操作的问题。我现在的代码如下。它应该生成一个大小为numgs*NUMVECTORS的二维数组。请让我知道,如果你发现任何原因,我可能会失去记忆或分配不正确。。。仅供参考,numigs和NUMVECTORS分别为20和15000,因此这是一个非常大的浮动数组,c++,arrays,opencv,C++,Arrays,Opencv,因此,现在我得到EXC_算术代码=EXC_I386_DIV subcode=0x0,可能它正在尝试对数据集进行操作,但拒绝0个值项?这部分看起来可疑: trainDataFloats[i] = thisHog; 您已经为trainDataFloats[x]分配了一个值,因此您正在泄漏内存,并且可能将trainDataFloats[i]设置为指向它不应该指向的内容 i这里循环到NUMVECTORS,但是trainDataFloats分配了NUMVECTORS元素,如果NUMVECTORS大于NU
trainDataFloats[i] = thisHog;
trainDataFloats[x]
分配了一个值,因此您正在泄漏内存,并且可能将trainDataFloats[i]
设置为指向它不应该指向的内容i
这里循环到NUMVECTORS
,但是trainDataFloats
分配了NUMVECTORS
元素,如果NUMVECTORS
大于NUMVECTORS
,则会出现缓冲区溢出。这不是在这个特殊的情况下,但它确实表明出了一些问题什么是
thisSVM
,它在哪里初始化?嗨,Stephan,thisSVM被全局声明为Ptr thisSVM然后在调用上面代码的方法中,它被初始化为thisSVM=ml::SVM::create()代码>(如果您想知道它肯定是在此代码之前调用的)您好,非常感谢您的帮助。我已经考虑到这一点,并重新设计了函数。我还删除了循环中不必要的浮点数组,但令人惊讶的是,它仍然具有糟糕的访问。我想没有什么事情我忘了考虑,你能看到吗?我已经用更新的代码修改了我的问题