weixin_40011552
且听下回分说
2020-09-24 16:03
采纳率: 69.2%
浏览 58

c++ string数组引用出错

string* getname()
{
  string name[6]={a,b,c,d,e,f};
    return name;
}

int main()
{
   string*  strName=getname();
   string NAME=strName[i];
}

报错:0x771740B2 处(位于 ConsoleApplication2.exe 中)有未经处理的异常: Microsoft C++ 异常: std::bad_alloc,位于内存位置 0x00976D54处

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

5条回答 默认 最新

  • caozhy
    已采纳

    string* getname()
    {
    string name[6]={a,b,c,d,e,f};
    return name;
    }
    ->
    string* getname()
    {
    string name[6]={a,b,c,d,e,f};
    string * name1 = new string[6];
    for (int i = 0; i < 6; i++) name1[i] = name[i];
    return name1;
    }

    不要返回堆栈上的局部变量的指针,因为对于主程序,它们是无效的。

    点赞 评论
  • Olly_Kao
    Olly_Kao 2020-09-24 17:47

    abcdef是什麼???還是你是想表達'a','b','c','d','e','f'???如果是後者那你用char name[6]就好了

    点赞 评论
  • weixin_42910064
    泡视界 2020-09-24 19:12

    朋友
    string* strName=getname();
    这句是获取了一个字符型指针,但是你在函数里的赋值,数据局部变量,函数结束就被释放了。
    因此你在后面
    string NAME=strName[i];
    访问了这个指针的第i位,先不说i没有定义,这里因为指针为mullptr,所以直接越界报错

    点赞 评论
  • qq_40817415
    qq_40817415 2020-09-25 13:19

    原因就在这句话: string name[6]={a,b,c,d,e,f};
    这句话,是创建的时候,是在一个函数内,是一个局部变量;而一执行完这个函数,内部就会自动清除 局部变量;建议new 一个堆区的;

    点赞 评论
  • ch593030323
    氺月洞天 2020-09-25 14:10

    string* getname()
    {
    string name[6]={a,b,c,d,e,f};
    return name;
    }
    改成
    string* getname()
    {
    string *name = new string[6]{a,b,c,d,e,f};
    return name;
    }

    点赞 评论

相关推荐