一个调试问题:Invalid Address specified to RtlSizeHeap,麻烦看看!

NistCK NistCK 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
下面这段代码, 调试的时候发现Add方法在连续调用几次后便出现: HEAP[MRServer.exe]: Invalid Address specified to RtlSizeHeap( 130000, 146678 ).
不知问题出在哪了? 麻烦高手看看。谢谢!

代码如下:

#include <vector>

//-----------------------------------------------------------------
// Property.CPP
//-----------------------------------------------------------------
class CProperty {
public:
CProperty(){
m_bstrPropName = BSTR("");
m_bstrPropValue = BSTR("");
}
virtual ~CProperty(){}
private:
BSTR m_bstrPropName;
BSTR m_bstrPropValue;
};
//-----------------------------------------------------------------

//-----------------------------------------------------------------
// DataBuffer.H
//-----------------------------------------------------------------
typedef std::vector<CProperty, std::allocator<CProperty> > PROPERTYVECTOR;

class CDataBuffer {
public:
BSTR GetData();
BSTR GetKey();
boolean SetKey(BSTR bstrKey);
boolean SetData(BSTR bstrData);
CDataBuffer(){}
virtual ~CDataBuffer(){}
private:
CComBSTR m_bstrKey;
CComBSTR m_bstrData;
PROPERTYVECTOR m_Prop;
};

// DataBuffer.CPP
boolean CDataBuffer::SetData(BSTR bstrData){
m_bstrData.Attach(bstrData);
return true;
}

boolean CDataBuffer::SetKey(BSTR bstrKey){
m_bstrKey.Attach(bstrKey);
retur true;
}

BSTR CDataBuffer::GetKey(){
return m_bstrKey.Copy();
}

BSTR CDataBuffer::GetData(){
return m_bstrData.Copy();
}
//-----------------------------------------------------------------

//-----------------------------------------------------------------
// Center.H
//-----------------------------------------------------------------
class ATL_NO_VTABLE CCenter :
public CComObjectRootEx<CComSingleThreadModel>,
public CComCoClass<CCenter, &CLSID_Center>,
public IDispatchImpl<ICenter, &IID_ICenter, &LIBID_MRSERVERLib>
{
public:
CCenter(){ }

DECLARE_REGISTRY_RESOURCEID(IDR_CENTER)

DECLARE_PROTECT_FINAL_CONSTRUCT()

BEGIN_COM_MAP(CCenter)
COM_INTERFACE_ENTRY(ICenter)
COM_INTERFACE_ENTRY(IDispatch)
END_COM_MAP()

// ICenter
public:
STDMETHOD(Add)(/*[in]*/ BSTR bstrKey, /*[in]*/ BSTR bstrInfo, /*[out,retval]*/ long* pResult);
};

// Center.CPP
typedef std::vector<CDataBuffer, std::allocator<CDataBuffer> > DATAVECTOR;

DATAVECTOR gData;

STDMETHODIMP CCenter::Add(BSTR bstrKey, BSTR bstrInfo,long* pResult){
CComBSTR bstrTmp(bstrKey);
if( bstrTmp.Length() == 0 ){
*pResult = -1;
return S_FALSE;
}
DATAVECTOR::iterator oIterator;
CDataBuffer* pDB = NULL;
CComBSTR thisKey(bstrKey);
for(oIterator = gData.begin(); oIterator != gData.end(); oIterator ++){
pDB = oIterator;
CComBSTR bstr(pDB->GetKey());
if( bstr == thisKey ){
*pResult = -2;
return S_FALSE;
}
}
CDataBuffer oDB;
oDB.SetKey(bstrKey);
oDB.SetData(bstrInfo);
gData.push_back(oDB);
*pResult = gData.size();

return S_OK;
}
//-----------------------------------------------------------------

//-----------------------------------------------------------------
// MRServer.idl
//-----------------------------------------------------------------
import "oaidl.idl";
import "ocidl.idl";
[
object,
uuid(78E1AFD6-4AD7-4232-8F56-0935BCC82762),
dual,
helpstring("ICenter Interface"),
pointer_default(unique)
]
interface ICenter : IDispatch
{
[id(1), helpstring("method Add")] HRESULT Add([in] BSTR bstrKey, [in] BSTR bstrInfo, [out,retval] long* plResult);
};

[
uuid(70484CAC-5FA6-4863-9FE0-48225B26F940),
version(1.0),
helpstring("MRServer 1.0 Type Library")
]
library MRSERVERLib
{
importlib("stdole32.tlb");
importlib("stdole2.tlb");

[
uuid(E351DEB7-48A8-474E-ABE2-3173BF575298),
helpstring("Center Class")
]
coclass Center
{
[default] interface ICenter;
};
};
//-----------------------------------------------------------------

//-----------------------------------------------------------------
// 调试代码(VB)
//-----------------------------------------------------------------
Private Sub Command1_Click()
Dim obj, i As Long
Dim n As Long
Set obj = CreateObject("MRServer.Center")
n = obj.Add("KEY_2", 6)
Debug.Print "First: " & n
For i = 1 To 9
n = obj.Add("KEY_" & i, "ITME_" & i)
Next
n = obj.Add("KEY_5", "d")
End Sub
//-----------------------------------------------------------------
...全文

相关推荐

西瓜成熟度图像分类数据集【已标注,约600张数据】

西瓜成熟度图像分类数据集【已标注,约600张数据】 分类个数【3】:成熟、半熟、未熟【具体查看json文件】 划分了训练集、测试集。存放各自的同一类数据图片。如果想可视化数据集,可以运行资源中的show脚本。 CNN分类网络改进:https://blog.csdn.net/qq_44886601/category_12858320.html 【更多图像分类、图像分割(医学)、目标检测(yolo)的项目以及相应网络的改进,可以参考本人主页:https://blog.csdn.net/qq_44886601/category_12803200.html】

听风吹等浪起

Spring事务和MySQL事务详解面试

文章目录数据库事务事务是什么事务的四大特性MySQL事务隔离级别查看MySQL当前事务隔离级别MySQL默认操作模式为自动提交模式JDBC处理事务Spring事务Spring的事务传播PROPAGATION_REQUIREDPROPAGATION_SUPPORTSPROPAGATION_MANDATORYPROPAGATION_REQUIRES_NEWPROPAGATION_NOT_SUPPORTEDPROPAGATION_NEVERPROPAGATION_NESTEDSpring事务的隔离级别Spring

南方淮竹

西瓜病识别图像分类数据集【已标注,约5,700张数据】

西瓜病识别图像分类数据集【已标注,约5,700张数据】 分类个数【4】:花叶病毒、健康、炭疽病和霜霉病【具体查看json文件】 划分了训练集、测试集。存放各自的同一类数据图片。如果想可视化数据集,可以运行资源中的show脚本。 CNN分类网络改进:https://blog.csdn.net/qq_44886601/category_12858320.html 【更多图像分类、图像分割(医学)、目标检测(yolo)的项目以及相应网络的改进,可以参考本人主页:https://blog.csdn.net/qq_44886601/category_12803200.html】

听风吹等浪起

西瓜成熟度识别数据集,13358张原始图,正确识别率98.8%,支持YOLO v11格式标注

西瓜成熟度识别数据集,13358张原始图,正确识别率98.8%,支持YOLO v11格式标注 两个标记: ripe和unripe 识别成熟和未成熟的西瓜

前网易架构师-高司机

36 种常见(水果和蔬菜图像)图像分类数据集【已标注,约3400张数据】

36 种常见(水果和蔬菜图像)图像分类数据集【已标注,约3400张数据】 数据经过预处理,可以直接作为分类网络输入使用 分类个数【36】:香蕉、苹果、梨、葡萄、橙子、猕猴桃、西瓜、石榴、菠萝、芒果、黄瓜、胡萝卜、辣椒、洋葱、马铃薯、柠檬、番茄、萝卜、甜菜根、卷心菜、生菜、菠菜、大豆、花椰菜、甜椒、辣椒、萝卜、玉米、甜玉米、甘薯、辣椒粉、墨西哥辣椒、姜、大蒜、豌豆、茄子【具体查看json文件】 划分了训练集、验证集。存放各自的同一类数据图片。如果想可视化数据集,可以运行资源中的show脚本。 图像分类、分割网络改进:https://blog.csdn.net/qq_44886601/category_12858320.html 计算机视觉完整项目:https://blog.csdn.net/qq_44886601/category_12816068.html

听风吹等浪起
评论 3
收藏 已收藏
分享
返回顶部
NistCK
ATL 3,248 成员 48,530 内容