我有一些代码存在于Qt GUI的按钮中。这段代码实例化了我开发的一个类,它进行了一些处理,并返回一个unsigned char **,如下所示:
void Viewer::button_click()
{
Classifier *pc = new Classifier(hhfile, vvfile, hvfile,aoix, aoiy,aoiw, aoih, target, filter );
unsigned char **data = pc->classify();
.
.
.
}
第一次单击按钮时,数组数据中包含正确的信息。在不将任何参数更改为Classifier类的情况下,如果再次单击该按钮,数据将返回FUBAR' d。
我没有明确删除数据或电脑,但我应该这样做吗?它们位于按钮功能范围内,所以我想我认为无论数据实际发生了什么,或者发生在Classify类中,我都应该得到完全相同的结果。它是否正确?将相同参数连续两次传递给类会产生不同结果的可能原因是什么?
答案 0 :(得分:1)
new
是当您指定希望超出功能范围的某些内容时语言使用的关键字。对于函数范围对象,您只需声明它们,即
Classifier pc(hhfile, vvfile, hvfile,aoix, aoiy,aoiw, aoih, target, filter );
你是否需要对classify()
返回的内存做任何事情,我不能说没有看到来源。
最可能的问题是你的参数是引用或指针,并且当你不应该修改那些数据时。
答案 1 :(得分:0)
如果classify();
正在为每次点击调用处理相同的数据,那么每次都会重新修改它,因此可能会导致数据损坏。我不知道classify()会做什么,很难说。
另外,分类器是指针而不仅仅是一个自动变量?
然后在每次单击时在本地范围内创建它,因此每次离开作用域时,该对象中包含的数据都会消失,而这里甚至用指针泄漏它,因为您没有进行适当的内存管理。
编辑:
我会这样做:
Classifier pc(hhfile, vvfile, hvfile,aoix, aoiy,aoiw, aoih, target, filter );
unsigned char **data = pc.classify();
现在,除非你的Classifier类在classify函数中做了一些奇怪的事情,你应该根据你给我们的数据得到你期望的结果。