有多个终端同时对服务器sql server 2000的一个表进行插入操作,结果在终端上发生内存泄漏,这是怎么回事?

lovememememe 2008-07-13 12:27:00
其中有一个字段存的是图片数据


m_pRecordset->AddNew();
m_pRecordset->PutCollect("PlateNum",_variant_t(DB_PlateNum));
m_pRecordset->PutCollect("HaveTime",_variant_t(DB_HaveTime));
m_pRecordset->PutCollect("PlateType",_variant_t(real_DB_PlateType));
m_pRecordset->PutCollect("PlateColor",_variant_t(DB_PlateColor));
m_pRecordset->PutCollect("LaneNum",_variant_t(DB_LineNum));
m_pRecordset->PutCollect("PortNum",_variant_t(real_DB_PortNum));
m_pRecordset->PutCollect("ImgName",_variant_t(DB_ImgName));

m_pRecordset->PutCollect("IsWarning",_variant_t(DB_Iswarning));
m_pRecordset->PutCollect("Ctype",_variant_t(real_DB_Ctype));

CFileException e;
OutputDebugString("debug 1");
if(fwdb.Open(SA_Path_N, CFile::modeRead ¦ CFile::typeBinary, &e)) //打开了一个近景jpg文件
{
int nSize = fwdb.GetLength(); //先得到jpg文件长度
BYTE * pBuffer = new BYTE [nSize]; //按文件的大小在堆上申请一块内存
// BYTE pBuffer[1024*300];
if (fwdb.Read(pBuffer, nSize) > 0 ) //把jpg文件读到pBuffer(堆上申请一块内存)
{ // +----------------------------------------------
VARIANT varBLOB;
SAFEARRAY *psa;
SAFEARRAYBOUND rgsabound[1];
if(pBuffer)
{
rgsabound[0].lLbound = 0;
rgsabound[0].cElements = nSize;

psa = SafeArrayCreate(VT_UI1, 1, rgsabound);
for (long i = 0; i < (long)nSize; i++)
SafeArrayPutElement (psa, &i, &pBuffer[i]);

varBLOB.vt = VT_ARRAY ¦ VT_UI1;
varBLOB.parray = psa;

m_pRecordset->GetFields()->GetItem("NImgData")->AppendChunk(varBLOB);//把jpg文件插入到数据库中

OutputDebugString("debug 4");
}

}
if(NULL!=pBuffer)
delete [] pBuffer; //删掉堆上申请的那一块内存
fwdb.Close();
}
...全文
81 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
hery2002 2008-07-13
  • 打赏
  • 举报
回复
这个貌似该发到C++版?
Low-Key地路过,
枪枪上~
内存泄漏 2008-07-13
  • 打赏
  • 举报
回复
楼上说的没错,如果涉及到大量图片的存放,用存放图片路径的方法比较好..
另外,关于内在泄漏,可以用boundschecker之类的工具软件查一下...
最后..在你代码插入图片之后,调用SafeArrayUnaccessData(varBLOB.parray);
当然,如果你没有调用如下语句,还需在你代码中加入:
m_pRecordset->Close();
m_pRecordset=NULL;
arong1234 2008-07-13
  • 打赏
  • 举报
回复
首先把图片放数据库是比较忌讳的,如果可以就不要这样干
其次SafeArrayCreate创建的东西是否也要释放
zhstars 2008-07-13
  • 打赏
  • 举报
回复
顶一下,最近也要做把图片存入数据库的工作,来学习学习!

4,011

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 数据库
社区管理员
  • 数据库
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧