关于返回局部变量地址的有关问题
关于返回局部变量地址的问题
程序中,有时候会提示是返回局部变量地址,而有时候却不,
如下面的程序:
而:
却不会提示返回局部变量地址,p1和p都属于局部变量,应该都是在栈上分配的吧,
是不是说,如果哦局部地址是通过调用构造函数产生的,则不能返回,如果是普通变量,则可以呢?
求解,
------解决方案--------------------
这两种都不应该使用,都是返回的局部变量的地址,函数结束后这个地址保存的数据已不能保证正确了,使用有很大风险。
------解决方案--------------------
语法有错的,编译器一定报错的。对于于有潜在风险的代码,编译器未必都要报错,否则就不会有那么多的bug
------解决方案--------------------
程序不该依赖编译器是否报错,类似潜在的bug编译器是无法发现的(至少现在是这样),如果你在一个函数中返回局部变量的地址,而此局部变量(static成员例外)一旦函数调用完毕其生命周期就结束了,此时,如果你再去访问这个地址,虽然有时能正确的取到数据,但只是碰巧的情况,所以如果需要的话,最好还是在堆上为其分配个内存的好
------解决方案--------------------
int* fff()
{
int p1 = 10;
int *p = &p1;
return p;
}
典型的bug代码之一,欺骗了编译器也欺骗了自己
------解决方案--------------------
第一个是直接返回局部变量的地址的!
第二个是通过一个指针指向,返回指针的内容的而已!
虽然意思都是相同的!但是编译器没有这么智能!退一步说,这个只能说是一个严重bug,语法没有问题!
------解决方案--------------------
正确!
------解决方案--------------------
只能说能否访问到,要看电脑的心情,高兴了给你返回正常的值,不高兴了就给你想不到的值,千万别这么搞,会出大事的
程序中,有时候会提示是返回局部变量地址,而有时候却不,
如下面的程序:
string* fff()属于返回局部变量地址,
{
string str("ha");
return &str;
}
而:
int* fff()
{
int p1 = 10;
int *p = &p1;
return p;
}
却不会提示返回局部变量地址,p1和p都属于局部变量,应该都是在栈上分配的吧,
是不是说,如果哦局部地址是通过调用构造函数产生的,则不能返回,如果是普通变量,则可以呢?
求解,
------解决方案--------------------
这两种都不应该使用,都是返回的局部变量的地址,函数结束后这个地址保存的数据已不能保证正确了,使用有很大风险。
------解决方案--------------------
语法有错的,编译器一定报错的。对于于有潜在风险的代码,编译器未必都要报错,否则就不会有那么多的bug
------解决方案--------------------
程序不该依赖编译器是否报错,类似潜在的bug编译器是无法发现的(至少现在是这样),如果你在一个函数中返回局部变量的地址,而此局部变量(static成员例外)一旦函数调用完毕其生命周期就结束了,此时,如果你再去访问这个地址,虽然有时能正确的取到数据,但只是碰巧的情况,所以如果需要的话,最好还是在堆上为其分配个内存的好
------解决方案--------------------
int* fff()
{
int p1 = 10;
int *p = &p1;
return p;
}
典型的bug代码之一,欺骗了编译器也欺骗了自己
------解决方案--------------------
第一个是直接返回局部变量的地址的!
第二个是通过一个指针指向,返回指针的内容的而已!
虽然意思都是相同的!但是编译器没有这么智能!退一步说,这个只能说是一个严重bug,语法没有问题!
------解决方案--------------------
正确!
------解决方案--------------------
只能说能否访问到,要看电脑的心情,高兴了给你返回正常的值,不高兴了就给你想不到的值,千万别这么搞,会出大事的