// 定义常量字符串
const CString Element = _T( "abcdefg" );
// 添加元素
CStringArray* pcstringarray = new CStringArray;
for (int i = 0; i < 1000; i++)
{
for (int j = 0; j < 1000; j++ )
{
pcstringarray->Add(Element);
}
}
........... pcstringarray->RemoveAll();请问这样释放可以保证里面每个元素的内存都释放了吗?如果是的话,为什么我看任务管理器里面的内存还是增长了呢?
const CString Element = _T( "abcdefg" );
// 添加元素
CStringArray* pcstringarray = new CStringArray;
for (int i = 0; i < 1000; i++)
{
for (int j = 0; j < 1000; j++ )
{
pcstringarray->Add(Element);
}
}
........... pcstringarray->RemoveAll();请问这样释放可以保证里面每个元素的内存都释放了吗?如果是的话,为什么我看任务管理器里面的内存还是增长了呢?
解决方案 »
- 结构体数据怎样存到sql server数据库里
- 关于m_recordset的一个问题
- 奇怪,我的VC为什么不能用fstream啊?
- 动态二维结构数组,急
- Service 创建进程的问题
- 请问如何在CMainFrame 中响应在某个View 中的动态建立的CTreeCtrl 控件消息
- 在建立html文件时,如何使用VC的资源位图,而不是位图的文件连结
- 怪问题请教各位高手! 急,急,急!
- 北京的软件人员的供需比已经达到了18:1 !!!
- 在VC中怎样扫描后台进程的SOCKET空闲状态!!!??在线等待!!
- USB过滤驱动:在OnStartDevice中构造IRP读U盘0扇区的问题
- Windows service 程序中使用IWebBrowser2接口操作IE,却显示不了窗口,大家看看这是咋回事?
if (pcstringarray)
{
delete pcstringarray;
pcstringarray = NULL;
}
所以归还的时候仅仅是归还给运行库,而运行库有权保留内存不归还操作系统,以便下次分配的时候快速分配。
这也就是为啥要快速分配内存的时候用内存池。
Removes all the pointers from this array but does not actually delete the CObject objects.
1.上面这样的问题有内存泄漏吗?
2.如何使用API分配内存谢谢另外
不用RemoveAll,而用1楼的
delete pcstringarray;
pcstringarray = NULL;
效果是一样的吗?即
// 定义常量字符串
const CString Element = _T( "abcdefg" );
// 添加元素
CStringArray* pcstringarray = new CStringArray;
for (int i = 0; i < 1000; i++)
{
for (int j = 0; j < 1000; j++ )
{
pcstringarray-> Add(Element);
}
}
...........
delete pcstringarray;
pcstringarray = NULL;
const CString Element = _T( "abcdefg" );
// 添加元素
CStringArray* pcstringarray = new CStringArray;
for (int i = 0; i < 1000; i++)
{
for (int j = 0; j < 1000; j++ )
{
pcstringarray-> Add(Element);
}
}
........... pcstringarray-> RemoveAll(); if (pcstringarray)
{
delete pcstringarray;
pcstringarray = NULL;
}这样还会有内存泄漏吗?总感觉里面的元素没有释放内存啊
最好使用运行库分配内存
只要不内存泄露就好。
int Add( CObject* newElement );
throw( CMemoryException );要求的是指针类型作为参数,上面的是用一个字符串常量作为参数这样在RemoveAll的时候,担心元素的对象就没有被释放啊因为RemoveAll只是清空元素的指针,元素本身没有被释放啊不知道那部分会不会引起内存泄漏啊
CArray<CString,CString&> array;
这样的
CStringArray内存分配都在 CStringArray::SetSize里面
里面的内存是确定已经释放了。
所以才这样用:
CStringArray* pcstringarray = new CStringArray;现在的问题就是这样用以后不知道应该怎么释放还有10楼的问题并没有解决啊
_DestructElements(m_pData, m_nSize);
delete[] (BYTE*)m_pData;
m_pData = NULL;
m_nSize = m_nMaxSize = 0;static inline void DestructElement(CString* pOldData)
{
ENSURE_ARG(pOldData!=NULL);
pOldData->~CString();
}static void _DestructElements(CString* pOldData, INT_PTR nCount)
{
ASSERT(nCount >= 0); while (nCount--)
{
DestructElement(pOldData);
pOldData++;
}
}上面代码都是摘自MFC的实现代码。