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处
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;
}
不要返回堆栈上的局部变量的指针,因为对于主程序,它们是无效的。
abcdef是什麼???還是你是想表達'a','b','c','d','e','f'???如果是後者那你用char name[6]就好了
朋友
string* strName=getname();
这句是获取了一个字符型指针,但是你在函数里的赋值,数据局部变量,函数结束就被释放了。
因此你在后面
string NAME=strName[i];
访问了这个指针的第i位,先不说i没有定义,这里因为指针为mullptr,所以直接越界报错
原因就在这句话: string name[6]={a,b,c,d,e,f};
这句话,是创建的时候,是在一个函数内,是一个局部变量;而一执行完这个函数,内部就会自动清除 局部变量;建议new 一个堆区的;
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;
}