0

我有一个 v 类,它动态分配一个双精度数组。Entries 是指向此数组开头的指针。间距允许我跳过条目,例如,如果我只想考虑每三个条目,间距将为 3。

double& v::operator[] (const int n) {
    return entries[n*spacing]; 
}

此下标运算符编译但会导致堆损坏。根据我的网络搜索,我认为 Visual Studio 将“条目 [n*spacing]”的结果存储在临时文件中,然后返回对临时文件的引用。当我尝试将此引用写入已释放内存时,会发生堆损坏。

有没有人有解决方法的想法?

4

1 回答 1

0

我认为 Visual Studio 将“条目 [n*spacing]”的结果存储在临时文件中,然后返回对临时文件的引用。

这是不正确的。假设entries定义为double entries[];or double* entries,则entries[i]返回一个引用,并且是由您的下标运算符返回的引用。

您的问题的根源在其他地方。也许在数组边界之外,或者在访问引用时n*spacing整个被释放。entries

于 2011-10-18T16:11:21.100 回答