我正在使用一个名为tArray的对象,它是一个对象数组,并且可以正常工作以执行所有其他任务。我需要使用对象数组中的buyerName形成一个字符串数组,以填充我们的新数组,然后返回它。但是我一直收到标题中所述的错误,有人知道为什么吗?到目前为止,我在我的程序中只是在使用这种方法。感谢
这第一块代码用于调用我的分析器类
中的方法std::string *topBuyers = analyser.topFiveBuyers();
for(int idx = 0; idx < 5; idx++)
std::cout << "Top buyer" << (idx+1) << ": " << topBuyers[idx] << std::endl;
std::cout << std::endl;
delete [] topBuyers;
下一部分代码是有问题的方法。
string* Analyser::topFiveBuyers()
{
const int sSize = 5;
string calcString[sSize] = {tArray[0].buyerName, tArray[1].buyerName,
tArray[2].buyerName, tArray[3].buyerName, tArray[4].buyerName};
return calcString;
}
答案 0 :(得分:5)
您正在从topFiveBuyers
返回指向临时变量的指针。
执行此操作的正确方法是从您的方法而不是vector<string>
返回array<string,5>
或string*
。
如果出于一些非常奇怪的原因,你绝对必须返回一个指针,你需要使用new
分配空间 - 包含它带来的所有问题,因为被叫者必须在它之后进行清理。您当前正在使用功能范围内的自动存储,但在功能返回后仍无法保证可用/可访问,因此您的访问违规。