面试题函数返回值 return 后的内容不能指向“栈内存”的“指针”和“引用”

char * Func( voi d)
{
      char str [] ="hello world";//str 的内存位于栈上
      ....
      return str ;// 将导致错误
}


例如vs2010中
// return.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>

using namespace std;

/*char * func1()
{
    char str[3];
    return str; //返回的str是在栈上的局部变量,返回时地址已经被回收会报错。
}*/
char * func()
{
    char * str = new char[5];
    return str;//要在堆上new一个地址,用后要delete,否则会内存泄露。
}

int main(int argc, char* argv[])
{
    //char * bb = func1();
    char * strP = func();
    strP[0] = 'q'; //初始化指针,此时strP的地址就是func()函数str的地址。
    strP[1] = 'c';
    strP[2] = 'd';
    strP[3] = 'f';
    strP[4] = 'k';

    char aa = strP[3];
    cout << aa << endl;
    delete strP;  //delete一次既可以,多次的话会导致,堆破坏提示函数包含free,head之类的关键词错误。
    return 0;
}
return 语句不可返回指向“栈内存”的“指针”或者“引用”,因为该内存在函数体结束时被自动销毁。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值