关于内存泄漏
_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;
}
编译器说有内存泄漏 那么怎样才能既实现功能 又不泄漏呢 展开
{
_variant_t *var1 = new _variant_t[10];
_variant_t *var2 = new _variant_t[10];
......
delete []var1;
return var2;
}
编译器说有内存泄漏 那么怎样才能既实现功能 又不泄漏呢 展开
展开全部
就你的代码看
NewReadRecord返回的是其申请的内存的地址,因此如果你在调用这个函数获得地址后,有自己去delete掉的话,那就没有所谓的内存泄露啦
这里编译器说由内存泄露,是因为它觉得你申请了2个内存空间,却仅释放了一个,因为它就以为由内存泄露了
NewReadRecord返回的是其申请的内存的地址,因此如果你在调用这个函数获得地址后,有自己去delete掉的话,那就没有所谓的内存泄露啦
这里编译器说由内存泄露,是因为它觉得你申请了2个内存空间,却仅释放了一个,因为它就以为由内存泄露了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
北京天空卫士网络安全技术有限公司
2020-12-31 广告
2020-12-31 广告
判断一个数据防泄漏公司的好坏,不只是看价格,还要考虑很多因素。建议可以多对比几个看看。您可以到北京天空卫士网络安全技术有限公司了解下。北京天空卫士网络安全技术有限公司是一家总部设立在北京经济技术开发区的数据安全技术企业。天空卫士致力于发展以...
点击进入详情页
本回答由北京天空卫士网络安全技术有限公司提供
展开全部
内存的操作不应该这样进行的。你应该吧var2作为指针或引用传进来。
即
bool CAdoFace::NewReadRecord(_variant_t *var2,const char * Colname, ...)
{
if(var2=NULL)
return false;
........
var2=XXXX;
}
这样才是高质量的代码。你那样的写法有出错的隐患。
另外建议你找高质量C/C++编程看看,百度以下就可以了
即
bool CAdoFace::NewReadRecord(_variant_t *var2,const char * Colname, ...)
{
if(var2=NULL)
return false;
........
var2=XXXX;
}
这样才是高质量的代码。你那样的写法有出错的隐患。
另外建议你找高质量C/C++编程看看,百度以下就可以了
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
var2没有释放,至少外边都没有释放,否则运行的时候不能说泄露吧....
如果外边释放了,那么其实没泄露。...
不过这样的写法也不是很好,一般分配释放在一起比较好,当然有的时候也是没办法的。
如果外边释放了,那么其实没泄露。...
不过这样的写法也不是很好,一般分配释放在一起比较好,当然有的时候也是没办法的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
return var2; 返回local变量是很危险的 内存泄露还是轻的 还有很多麻烦事
这种情况下 你又不可能先delete 所以问题的根源在于你的函数原型
建议该成返回值 或者 void
这种情况下 你又不可能先delete 所以问题的根源在于你的函数原型
建议该成返回值 或者 void
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
将var2作为参数传递给函数,这样这个函数就可以写成void型了,当然你要自己在函数外写delete []var2;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询