【问题标题】:Avoiding Temporary Variable in Subscript Operator避免下标运算符中的临时变量
【发布时间】:2023-03-11 08:46:03
【问题描述】:

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 进一步检查显示条目无效。谢谢 K-ballo。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-20
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多