【问题标题】:Memory error caused by custom class function自定义类函数导致的内存错误
【发布时间】:2020-06-16 19:11:06
【问题描述】:

我有一个类,它有一个在指定索引处添加元素的方法。 我试图复制向量的最后一个元素并将每个元素向右移动一次,以便我可以将新元素插入到给定位置。 这是我写的代码:

void Halmaz::add(const int index, const int num) {
    elemek.push_back(elemek.back());
    for (int i = elemek[elemek.size()-2]; i > index; i--){
        elemek[i] = elemek[i-1];
    }
    elemek[index] = num;
    //findMax();
}

这是我在尝试调用 add() 函数时遇到的错误: 测试代码:

int main()
{
    Halmaz lista;
    lista.add(2);
    lista.add(3);
    lista.add(6);
    lista.add(1);
    lista.add(3);
    lista.print();
    cout << endl;
    cout << lista.getMax() << endl;;
    lista.add(66);
    lista.print();
    cout << lista.getMax() << endl;;
    cout << "---------------------" << endl;
    lista.add(2,10); //the program stops here
    cout << "---------------------" << endl;
    return 0;
}

错误:

 once 00C7CE88 is 201369893

【问题讨论】:

  • insert() 有什么问题?
  • 使用调试器逐句执行代码,同时监控变量及其值。您可能写出elemek 向量的范围。如果您需要更多帮助,请尝试创建minimal reproducible example 向我们展示。
  • 我忘了说我知道 insert() 但我想弄清楚这个错误信息以供学习使用

标签: c++ class oop object methods


【解决方案1】:
for (int i = elemek[elemek.size()-2]; i > index; i--){

应该是

for (int i = elemek.size()-2; i > index; i--){

【讨论】:

  • 我不敢相信我没有注意到这一点。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-09-11
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多