Visual c++ 避免在下标运算符中使用临时变量
我有一个v类,它动态地分配一个double数组。条目是指向此数组开头的指针。间距允许我跳过条目,例如,如果我只考虑每第三个条目,间隔将是3。p>Visual c++ 避免在下标运算符中使用临时变量,visual-c++,reference,subscript-operator,Visual C++,Reference,Subscript Operator,我有一个v类,它动态地分配一个double数组。条目是指向此数组开头的指针。间距允许我跳过条目,例如,如果我只考虑每第三个条目,间隔将是3。p> double& v::operator[] (const int n) { return entries[n*spacing]; } 此下标运算符可编译,但会导致堆损坏。基于我的web搜索,我认为VisualStudio正在将条目[n*spacing]的结果存储在临时文件中,然后返回对临时文件的引用。当我尝试写入此引用以释放内存时,
double& v::operator[] (const int n) {
return entries[n*spacing];
}
此下标运算符可编译,但会导致堆损坏。基于我的web搜索,我认为VisualStudio正在将条目[n*spacing]的结果存储在临时文件中,然后返回对临时文件的引用。当我尝试写入此引用以释放内存时,会发生堆损坏
有人有解决办法的想法吗
我认为VisualStudio将条目的结果[n*spating]存储在一个临时文件中,然后返回对临时文件的引用
这是不正确的。假设条目定义为双条目[];或double*条目,然后条目[i]返回一个引用,即下标运算符返回的引用
你的问题源于其他地方。可能是n*间距超出了数组边界,或者在访问引用时整个条目被释放。进一步检查表明条目无效。谢谢K-ballo。