c ++ - 访问冲突读取位置0xcccccccc

时间:2013-03-08 20:04:32

标签: c++

我正在使用一个名为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;
}

1 个答案:

答案 0 :(得分:5)

您正在从topFiveBuyers返回指向临时变量的指针。

执行此操作的正确方法是从您的方法而不是vector<string>返回array<string,5>string*

如果出于一些非常奇怪的原因,你绝对必须返回一个指针,你需要使用new分配空间 - 包含它带来的所有问题,因为被叫者必须在它之后进行清理。您当前正在使用功能范围内的自动存储,但在功能返回后仍无法保证可用/可访问,因此您的访问违规。