我有一个自己每秒调用10次的函数。我正在使用QTimer进行重复呼叫。
void DisplayClass::UpdateGuiWithData()
{
//miscellaneous code which is validated
SingletonObjectAsThread::instance()->UpdateFromGuiToExternalHardware(ClassOjbectArray,var1,var2);
QTimer::singleShot(100,this,SLOT(UpdateGuiWithData()));
}
Class A_ComposingClass_B_Object
{
//boolean and enum variables
B ArrayOf_B_Objects[16];
}
Class B
{
//boolean and enum vairables
}
class DisplayClass
{
//variables that are not a concern here
UpdateGuiWithData();
A ArrayOfObject_A[4];
};
Class SingletonAsThread
{
//vairables that are not a concern here
UpdateFromGui(A_ComposingClass_B_Object*,const bool&,const bool&);
};
这是我按原样运行代码时的交易,内存大小稳步增加但是当我在UpdateGuiWithData类中注释掉对UpdateFromGui调用的调用时,内存保持在大约51 MB的恒定级别。 UpdateFromGui函数没有动态内存分配或GUI功能。它只是一个平面jane函数,它构造数据包以写入串行端口,并且每秒调用10次,因为这是硬件的刷新率。
我能想到内存增加的唯一原因是每次调用UpdateFromGui函数时传递对象数组。我认为每次调用我们都会创建一个类对象的副本,从而增加内存。然后我尝试使用传递的对象数组作为函数的引用但是找不到合适的函数声明虽然我找到了这种功能的定义和用法。这是我在网上找到的。
//通过引用接收数组。
void GetArray( int (&Array) [10] )
{
}
// Test array by reference.
void CRabbitDlgDlg::TestArray()
{
// Pass array by reference.
int Array[10] = { 0 };
GetArray( Array );
}
我的问题是
--->我是在思考正确的方向还是与重复调用单身人士有关
类对象?
--->我也需要这里的A类复制构造函数,尽管没有动态
这个类中的分配或指针变量?
--->还有什么可能是这个内存泄漏的来源(如果不是它不是关于复制构造函数或单例调用),这会不断增加内存使用量
申请?
答案 0 :(得分:1)
C和C ++中的数组不能按照您描述的方式工作。我们称之为“数组”的只是一个内存区域,其中对象彼此相邻放置,指针指向第一个对象。将指针传递给函数时,只需传递一个整数。它指向的对象没有被复制,它会一直指向相同的连续内存块。
您遇到的是真正的内存泄漏。你在某个地方分配内存而忘记释放它,当它不再需要时。或者你输入你不想要的递归,每个函数在堆栈中分配一些内存。
你的clode被严重呈现 - 我找不到声明,你在代码窗口之后正在谈论它。