我使用C++和Visual Studio 2005增加物理内存不断的Visual C++ CryptMsgClose和CryptReleaseContext
我有一个项目,在一个非常不正常的内存增加。当调试代码时,我意识到有几个部分可以为它做出贡献。像这样,例如:
// has to add crypt32.lib to link
#include <windows.h>
#define MY_ENCODING_TYPE (PKCS_7_ASN_ENCODING | X509_ASN_ENCODING)
void memoryUP(const unsigned char *pData, int cData)
{
HCRYPTMSG msg = NULL;
HCRYPTPROV hProv = NULL;
CryptAcquireContext(&hProv,NULL,NULL,PROV_RSA_FULL,0);
msg = CryptMsgOpenToDecode(MY_ENCODING_TYPE,0,0,hProv,NULL,NULL);
if(!(CryptMsgUpdate(msg, pData, cData, TRUE)))
{
if(msg != NULL)
{
CryptMsgClose(msg);
msg = NULL;
}
}
if (hProv != NULL)
CryptReleaseContext(hProv,0);
if (msg != NULL)
{
CryptMsgClose(msg);
msg = NULL;
}
}
int main(int argc, char** argv)
{
MyFile myfile = myReadFile("c:\\file.p7s");
{
for(int i=0; i<100000; ++i)
{
memoryUP(myfile._data, myfile._length);
}
}
delete myfile;
return 0;
}
当我运行这段代码时,内存在调用CryptMsgUpdate时不断上升。我是否释放错误?
我试图用Memory Leak Detection Enabling的方法来检测内存泄漏,但似乎没有什么:提前
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
and
_CrtDumpMemoryLeaks();
感谢
只是一个疯狂的猜测,你不应该以他们的收购逆向顺序释放资源吗?也就是说,'CryptMsgClose'应该在*'CryptReleaseContext'之前。 –
你是说你每次调用memoryUP()时都会增加你的内存使用量吗?如果您注释掉CryptMsgUpdate()调用,会发生什么? - 你还记得每次增加的记忆吗? –
为什么_CryptMsgClose(msg); _块被调用两次? –