调试断言失败并显示列表

Posted

技术标签:

【中文标题】调试断言失败并显示列表【英文标题】:Debug assertion failed with list 【发布时间】:2020-05-07 22:54:27 【问题描述】:

大家好,可以帮帮我吗? 问题是当一个人从列表中输入一个元素时,他可以在这个元素之前插入另一个列表中的元素,但我不断地敲出错误。也许有人会帮忙? 看起来像: 3 6 7 9 用户输入 6 他可以创建另一个列表,例如 8 7 5 输出为 3 8 7 5 6 7 9 The error

#include <iostream>
#include <list>
#include <algorithm>
#include <iterator>
int main()

int size
int size1;
int el1;
int znach=0;
    cout << "Enter size: " << endl;
        cin >> size;
         list<int>lis;
            list<int>lis1;
            list <int> ::iterator it;
            int s = lis.size() / 2;
            auto it1 = lis.begin();
            advance(it1, s);
            for (int i = 0; i <size; i++)
            
                cout << "Enter " << i << " element: ";
                cin >> t;
                lis.push_back(t);
            
            cout << "Enter element: " << endl;
            cin >> el1;
            for (it = lis.begin(); it != lis.end(); it++)
            

                if (*it = el1)
                
                    znach++;
                
            
                 if (znach == 0)
                    
                        cout << "There is no element;" << endl;
                    
        else
                
                    cout << "Enter size of new vector: " << endl;
                    cin >> size1;
                    for (int i = 0; i < size1; i++)
                    
                        int t1;
                        cout << "Enter " << i << " element: ";
                        cin >> t1;
                        lis1.push_back(t1);
                    
                    auto it2 = lis.begin();
                    while (*it2 != el1)
                    
                        it2++;
                    
                    --it2;
                    lis.splice(it2, lis1);
                


            for (it = lis.begin(); it != lis.end(); it++)
            
                cout << *it<<" ";
            
        

【问题讨论】:

什么调试断言失败了? size 是什么?请提供minimal reproducible example 对不起,更新了。 您应该将消息作为文本包含在问题中(不是每个人都可以查看图像)。它说“不能减少开始迭代器”并且有一个地方可以减少迭代器,现在尝试猜测问题出在哪里;) @idclev463035818 如果我删除行 --it2;它运行良好,但输出错误。我输入第一个列表 1 5 7,然后输入我想将第二个列表放在 num 之前(第二个列表是 9 8),输出是 9 8 5 5 5 【参考方案1】:

我不知道你的代码在做什么,也许还有其他问题。但是,您得到的运行时错误是由

引起的
auto it2 = lis.begin();
while (*it2 != el1)

    it2++;

--it2;

*lis.begin() == el1 时,你永远不会增加it2 然后再减少它,但你不能减少开始迭代器。通常那只是未定义的,但是当你编译一个调试版本时,你会得到一个断言,告诉你出了什么问题。

【讨论】:

以上是关于调试断言失败并显示列表的主要内容,如果未能解决你的问题,请参考以下文章

有啥方法可以避免 C++ 中的“调试断言失败”窗口?

调试断言失败,字符串下标超出范围

C++ 调试断言失败。向量下标超出范围

调试断言失败

调试断言失败

调试断言失败!奇怪的问题