关于内存泄漏

_variant_t*CAdoFace::NewReadRecord(constchar*Colname,...){_variant_t*var1=new_variant... _variant_t* CAdoFace::NewReadRecord(const char * Colname, ...)
{
_variant_t *var1 = new _variant_t[10];
_variant_t *var2 = new _variant_t[10];
......
delete []var1;
return var2;
}
编译器说有内存泄漏 那么怎样才能既实现功能 又不泄漏呢
展开
 我来答
1219194
2008-08-08 · 超过19用户采纳过TA的回答
知道答主
回答量:137
采纳率:0%
帮助的人:81.4万
展开全部
就你的代码看
NewReadRecord返回的是其申请的内存的地址,因此如果你在调用这个函数获得地址后,有自己去delete掉的话,那就没有所谓的内存泄露啦

这里编译器说由内存泄露,是因为它觉得你申请了2个内存空间,却仅释放了一个,因为它就以为由内存泄露了
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
北京天空卫士网络安全技术有限公司
2020-12-31 广告
判断一个数据防泄漏公司的好坏,不只是看价格,还要考虑很多因素。建议可以多对比几个看看。您可以到北京天空卫士网络安全技术有限公司了解下。北京天空卫士网络安全技术有限公司是一家总部设立在北京经济技术开发区的数据安全技术企业。天空卫士致力于发展以... 点击进入详情页
本回答由北京天空卫士网络安全技术有限公司提供
thynson
2008-08-09 · 超过15用户采纳过TA的回答
知道答主
回答量:39
采纳率:0%
帮助的人:0
展开全部
内存的操作不应该这样进行的。你应该吧var2作为指针或引用传进来。

bool CAdoFace::NewReadRecord(_variant_t *var2,const char * Colname, ...)
{
if(var2=NULL)

return false;

........
var2=XXXX;

}
这样才是高质量的代码。你那样的写法有出错的隐患。
另外建议你找高质量C/C++编程看看,百度以下就可以了
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
fifaboy
2008-08-08 · TA获得超过3219个赞
知道大有可为答主
回答量:3046
采纳率:0%
帮助的人:1716万
展开全部
var2没有释放,至少外边都没有释放,否则运行的时候不能说泄露吧....
如果外边释放了,那么其实没泄露。...

不过这样的写法也不是很好,一般分配释放在一起比较好,当然有的时候也是没办法的。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
2008-08-09 · TA获得超过266个赞
知道小有建树答主
回答量:289
采纳率:0%
帮助的人:264万
展开全部
return var2; 返回local变量是很危险的 内存泄露还是轻的 还有很多麻烦事

这种情况下 你又不可能先delete 所以问题的根源在于你的函数原型

建议该成返回值 或者 void
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
忘至白葬不情必0T
2008-08-08 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:90%
帮助的人:1.2亿
展开全部
将var2作为参数传递给函数,这样这个函数就可以写成void型了,当然你要自己在函数外写delete []var2;
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(7)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式