读书人

高分:函数参数这样传递有没有危险这

发布时间: 2012-02-06 15:52:44 作者: rapoo

高分:函数参数这样传递有没有危险,这样接受返回值有没有问题
函数参数这样传递有没有危险
char* A(char* par)
{
char * p=par;
return p;
}

main(){

char *p = A( "is it dangerous????? ");

}

[解决办法]
有很多类似这样的程序,当然有高风险,当然也很容易用正确。
A函数必须明确注明它的这个传递效果,使用者必须确保对象生存期和所有权问题。

[解决办法]
你给的这个具体的例子中确实没啥风险。
[解决办法]
我感觉只要是传值的,不是传引用的
遵循一定的规则,比如内存谁申请,谁负责删除
应该没有危险.
[解决办法]
这个例子好像没风险
[解决办法]
你给的这个具体的例子中确实没啥风险。

[解决办法]
内存有泄露吗?指针指向一个常量字符串而已,不会自动释放的
[解决办法]
没new的 怎么来风险?? 一般的静态和堆栈变量程序过期即作废
望赐教
[解决办法]
你给的这个具体的例子中确实没啥风险。
[解决办法]
你这个例子没有任何风险,不管调用多少次
[解决办法]
char* A(char* par)
{
char * p=par;
return p;
}

main(){

char *p = A( "is it dangerous????? ");//这里的字符串是常量,一直存在,不是new的,没有问题

}

楼主的函数只不过用一个新的指针,仍指向了在函数外(也就是比函数生存期长)的旧字符串,所以没有任何问题
[解决办法]
lz 还是看下变量模型这一张 感觉你一些基本问题上没弄清楚
[解决办法]
我用循环调了一下,结果同xlbdan解释的
其实这几个指针都是指向一开始 A( "is it dangerous????? ")分配的区域
没有内存风险!
[解决办法]
这个。
这个,还是推荐看一下《c/c++高质量编程指南》
[解决办法]
在读数据库的函数A里面:
variant var;
char *strret = _com_util::ConvertBSTRToString( (_bstr_t)var );
函数返回后var释放掉了,为什么strret仍有值?
=============================================
strret 的值只有别人给他赋值的时候才能改变,
即使它所指向的内存已经被释放了,strret 的值还是原来的内存地址,
只是现在如果想通过strret操作这个值是非法的,虽然不一定产生错误
[解决办法]
"想通过strret操作这个值是非法的 ".可以返回这个值(内存地址),外面可以得到这个值(内存地址)对吗?
===============================================
对,外面可以得到这个值。
所以有些编成习惯是这样的:
delete p;
p=0;
在释放内存后,再把原先指向这块内存的指针赋值为0;
这样如果有其他人还想操作p这个指针的时候就会发生错误。
[解决办法]
char * __cdecl strcpy(char * dst, const char * src) {
char * cp = dst;
while( *cp++ = *src++ ) ; /* Copy src over dst */
return( dst );
}
标准函数都这样写,有没有危险在于怎么用
[解决办法]
To:luora()
在楼主给出的例子中,p所指向的位置并非局部的,因此没有问题。
[解决办法]
1。A(char* par) 生成一个临时的char*指针_par,和par指向同一块内存。
2。char * p=par,将_par赋值给p,p指向par所指向的内存。
3。return p;返回一个指向par所指向的内存的指针。
有什么问题?没有内存申请!何来内存泄露?

读书人网 >C++

热点推荐