Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ (Win7:VC7):TaskMgr建议“内存泄漏”,因为二维静态数组已填充,尽管进行了初始化_C++_Arrays_Memory Leaks_Mfc - Fatal编程技术网

C++ (Win7:VC7):TaskMgr建议“内存泄漏”,因为二维静态数组已填充,尽管进行了初始化

C++ (Win7:VC7):TaskMgr建议“内存泄漏”,因为二维静态数组已填充,尽管进行了初始化,c++,arrays,memory-leaks,mfc,C++,Arrays,Memory Leaks,Mfc,我有一个在VS VC7下编译的MFC应用程序。每个任务管理器都有一个持久的、令人担忧的内存泄漏 我下载了一个专业的内存泄漏检测应用程序,它突出显示了VC7核心库中与套接字相关的一些一次性调用。因此,我注释掉了主程序通过套接字连接的所有一次性调用。但是,泄漏仍然存在 继续注释代码的整个部分,我似乎已经找出了罪魁祸首,我非常困惑 如果我注释掉对以下函数循环缓冲区(Rough spin lock)的调用,该函数在计时器循环中每秒调用一次,taskmgr表示基本上不再存在泄漏: void CIBTrad

我有一个在VS VC7下编译的MFC应用程序。每个任务管理器都有一个持久的、令人担忧的内存泄漏

我下载了一个专业的内存泄漏检测应用程序,它突出显示了VC7核心库中与套接字相关的一些一次性调用。因此,我注释掉了主程序通过套接字连接的所有一次性调用。但是,泄漏仍然存在

继续注释代码的整个部分,我似乎已经找出了罪魁祸首,我非常困惑

如果我注释掉对以下函数循环缓冲区(Rough spin lock)的调用,该函数在计时器循环中每秒调用一次,taskmgr表示基本上不再存在泄漏:

void CIBTraderDlg::PushPriceVolume()
{
    INT i;

    InterlockedIncrement(&g_nNowRow); 

    if ( g_nNowRow == MAX_HISTORY) InterlockedExchange(&g_nNowRow, 0);

    for ( i = 0; i < g_Config.m_nFutureCount + g_Config.m_nSpreadCount; i++ )
    {
        pPH[i][g_nNowRow] = g_Config.m_pFutureInfos[i].dBid;
        pVH[i][g_nNowRow] = g_Config.m_pFutureInfos[i].nThisV;
    }

    if ( nHistoryCount < MAX_HISTORY ) InterlockedIncrement(&nHistoryCount);
}
MAX_合同和MAX_历史均已知

这些都是大阵列,就像它发生的那样。最大历史记录=每天86400秒

注意:我做了很多数学运算,数组中填充了正确的值


基于taskmgr,当阵列中充满实际数据时,内存中程序的大小会增加,对于运行7 x 24的应用程序,速度会急剧增加,达到每分钟10K字节。但是数组是静态定义的,大小固定,并且要预先填充零。我的想法是,我有足够的RAM,通过这样做,内存中数组的大小是固定的。显然,我错了。在过去的两天里,我阅读了许多关于更好、更优雅、更高效的多维数组分配方法的文章,但我没有读到任何地方认为我所做的是行不通的。

你的for循环是危险的,因为你没有将I限制在小于MAX\u的范围内。此外,您不检查g_nNowRow是否在范围内。如何通过Windows任务管理器识别内存泄漏?Matt,内存私有工作集下的进程数}似乎继续无限增长。它提醒我做更多正式的内存泄漏检测,因为我自己的代码中没有消息,因此没有明显的泄漏源,。我会把它清理干净。@cjv:Windows任务管理器不是查找漏洞的可靠方法。如果您在调试模式下运行,您将看到远远高于预期的内存使用率。一般来说,由于内存分配在Windows上的工作方式,您也不能保证删除20 MB的对象将减少20 MB或根本减少内存使用。
DOUBLE pPH[MAX_CONTRACTS][MAX_HISTORY] = {0.00};
INT pVH[MAX_CONTRACTS][MAX_HISTORY] = {0};