访问冲突读取位置0xcccccccc

Access violation reading location 0xcccccccc

本文关键字:0xcccccccc 位置 读取 访问冲突      更新时间:2023-10-16

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

topFiveBuyers返回一个指向临时变量的指针。

正确的方法是从你的方法返回vector<string>array<string,5>而不是string*

如果由于一些非常奇怪的原因,你绝对必须返回一个指针,你就需要使用new分配空间——伴随着它带来的所有问题,因为被调用者必须在它之后清理它。当前在函数范围内使用自动存储,不能保证在函数返回后仍然可用/可访问,因此存在访问冲突。