C++ 调试断言在Visual Studio中失败,但在联机IDE上运行正常
我的代码在联机IDE上运行时运行良好,但在visual studio上运行时由于调试断言错误而失败。错误可能在rand()函数中,因为当我专门使用随机整数值时,它工作得很好。我不明白为什么它不能在VS上运行 将显示以下消息: 另外,我想问一下如何调试这些错误,因为它们没有指定特定的代码实例C++ 调试断言在Visual Studio中失败,但在联机IDE上运行正常,c++,C++,我的代码在联机IDE上运行时运行良好,但在visual studio上运行时由于调试断言错误而失败。错误可能在rand()函数中,因为当我专门使用随机整数值时,它工作得很好。我不明白为什么它不能在VS上运行 将显示以下消息: 另外,我想问一下如何调试这些错误,因为它们没有指定特定的代码实例 #include <iostream> #include <list> #include <cstdlib> //for rand() function
#include <iostream>
#include <list>
#include <cstdlib> //for rand() function
using namespace std;
void display(list <int> &lst)
{
list <int> ::iterator p;
for (p = lst.begin(); p != lst.end(); p++)
{
cout << *p << " ";
}
cout << "\n\n";
}
int main()
{
list <int> list1; //empty list of zero length
list <int> list2(5); //empty list of size 5
for (int i = 0; i < 3; i++)
{
list1.push_back(rand() % 100);
}
list <int> ::iterator p;
for (p = list2.begin(); p != list2.end(); p++)
{
*p = (rand() % 100);
}
cout << "List1: ";
display(list1);
cout << endl << endl;
cout << "List2: ";
display(list2);
cout << endl << endl;
//Add two elements at the ends of list 1
list1.push_back(200);
list1.push_front(100);
//Remove an element at the front of list 2
list2.pop_front();
cout << "Now list1: ";
display(list1);
cout << "\n\n";
cout << "Now list2: ";
display(list2);
cout << "\n\n";
list<int> listA, listB;
listA = list1;
listB = list2;
//Merging two lists(unsorted)
list1.merge(list2);
cout << "Merged unsorted lists\n";
display(list1);
cout << "\n\n";
//Sorting and merging
listA.sort();
listB.sort();
listA.merge(listB);
cout << "Merged sorted lists\n";
display(listA);
cout << "\n\n";
//Reversing a list
listA.reverse();
cout << "Reversed merged list: \n";
display(listA);
return 0;
}
#包括
#包括
#include//for rand()函数
使用名称空间std;
无效显示(列表和lst)
{
列表::迭代器p;
对于(p=lst.begin();p!=lst.end();p++)
{
coutmerge
要求对列表进行排序(请参阅:)。在第一次调用merge
时,列表未排序(列表仅在第二次调用之前排序)
<>调试模式下,微软C++标准库包括执行额外的运行时检查来执行不变量,例如“在线IDE”。可能将GCC与libstdc++或类似软件一起使用,通常不包括与Microsoft库相同级别的运行时检查,因此不会发现错误。merge
要求对列表进行排序(请参阅:)。在第一次调用merge
时,列表不会排序(列表仅在第二次呼叫之前排序)
<>调试模式下,微软C++标准库包括执行额外的运行时检查来执行不变量,例如“在线IDE”。可能将GCC与libstdc++或类似软件一起使用,通常不包括与Microsoft库相同级别的运行时检查,因此不会发现错误。的文档说明:
异常安全
如果两个容器中的分配器比较不相等,如果comp没有定义严格的弱排序,或者如果容器元素
未按其排序,会导致未定义的行为
否则,如果比较引发异常,则容器将
处于有效状态(基本保证)。否则,如果出现异常
抛出时,容器中没有任何更改(强保证)
<> P>根据编译器的实现行为,在合并未排序列表时可能会有所不同。显然VisualStudio在C++模式下不需要(但允许)的调试模式下进行额外检查。
异常安全
如果两个容器中的分配器比较不相等,如果comp没有定义严格的弱排序,或者如果容器元素
未按其排序,会导致未定义的行为
否则,如果比较引发异常,则容器将
处于有效状态(基本保证)。否则,如果出现异常
抛出时,容器中没有任何更改(强保证)
根据编译器的实现行为,在合并未排序列表时可能会有所不同。显然VisualStudio在C++模式下不要求(但允许)的调试模式下进行额外检查。< /P>请至少将完整断言消息添加到您的问题中,并对其发生的行进行注释。“我还想问一下如何调试这些错误。。。"您可以使用调试器逐行检查代码,直到得到断言错误。我为错误添加了一个屏幕截图。请检查屏幕截图没有用处。它们无法从搜索引擎中搜索和索引。请以文本形式发布错误。我添加了一条粗体注释。请检查。请至少将完整的断言消息添加到您的问题,并在该行的具体位置进行评论。“另外,我想问一下如何调试这些错误…”您可以使用调试器逐行检查代码,直到得到断言错误。我为错误添加了一个屏幕截图。请检查屏幕截图没有用。它们无法从搜索引擎中搜索和索引。请将错误以文本形式发布。我添加了一条粗体注释。请检查。谢谢。这真的很有帮助。有没有办法然后是两个未排序的列表?我一直在寻找,这取决于您想要的行为,您应该使用splice
或insert
函数。merge
根据定义将第二个列表保留为空。如果这是您想要的行为,那么您应该使用splice
。如果这不是您想要的行为,请当你应该使用insert
时。谢谢。这真的很有帮助。有没有办法合并两个未排序的列表?我正在寻找,根据你想要的行为,你应该使用splice
或insert
函数。merge
将第二个列表定义为空。如果这是行为y如果需要,则应使用splice
。如果这不是您想要的行为,则应使用insert
。
#include <iostream>
#include <list>
#include <cstdlib> //for rand() function
using namespace std;
void display(list <int> &lst)
{
list <int> ::iterator p;
for (p = lst.begin(); p != lst.end(); p++)
{
cout << *p << " ";
}
cout << "\n\n";
}
int main()
{
list <int> list1; //empty list of zero length
list <int> list2(5); //empty list of size 5
for (int i = 0; i < 3; i++)
{
list1.push_back(rand() % 100);
}
list <int> ::iterator p;
for (p = list2.begin(); p != list2.end(); p++)
{
*p = (rand() % 100);
}
cout << "List1: ";
display(list1);
cout << endl << endl;
cout << "List2: ";
display(list2);
cout << endl << endl;
//Add two elements at the ends of list 1
list1.push_back(200);
list1.push_front(100);
//Remove an element at the front of list 2
list2.pop_front();
cout << "Now list1: ";
display(list1);
cout << "\n\n";
cout << "Now list2: ";
display(list2);
cout << "\n\n";
list<int> listA, listB;
listA = list1;
listB = list2;
//Merging two lists(unsorted)
list1.merge(list2);
cout << "Merged unsorted lists\n";
display(list1);
cout << "\n\n";
//Sorting and merging
listA.sort();
listB.sort();
listA.merge(listB);
cout << "Merged sorted lists\n";
display(listA);
cout << "\n\n";
//Reversing a list
listA.reverse();
cout << "Reversed merged list: \n";
display(listA);
return 0;
}