在下标运算符中避免临时变量

时间:2011-10-18 16:07:29

标签: visual-c++ reference subscript-operator

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

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

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

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

1 个答案:

答案 0 :(得分:0)

  

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

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

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