草庐IT

c++ - 调用 std::map::clear 的段错误

几个月来我一直在与段错误作斗争,现在我来这里寻求帮助。当我调用以下函数时出现段错误voidfoo(...,std::map&x){if(!x.empty())x.clear();...}ClassA{private:map_N;public:voidf(...){foo(...,_N);...}};//inmainroutine,thefunctioniscalledinaloopAa;while(...){a.f(...);}使用gdb,我将错误定位到调用clear()函数的行,它显示“doublefreeorcorruption”错误,程序在调用c++/4.1.2/ext/new_

c++ - 我应该 clear() 作为参数传入的容器,还是换入一个新对象?

按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实、引用或专业知识的支持,但这个问题可能会引发辩论、争论、投票或扩展讨论。如果您觉得这个问题可以改进并可能重新打开,visitthehelpcenter指导。关闭10年前。我在工作中讨论如何正确处理容器作为参数。我们有一个接受容器参数的函数,并希望返回仅填充函数放入其中的内容的容器:classbar;voidfoo(std::vector&bars){//dostuffthatfillsbars.//exceptionsmaybethrown.//wemayalsolegallyreturnearlyreturn;}在讨论

c++ - 如果新大小小于或等于旧大小,标准是否保证 std::string::resize 不会重新分配内存?

我需要经常将字符串设为空,然后在其中添加一些字符。std::string::clear()可能重新分配std::string::resize(0)是否重新分配?标准的话并没有引起任何注意。 最佳答案 我认为最好的答案是http://en.cppreference.com/w/cpp/string/basic_string/clear的“注释”部分.Unlikeforstd::vector::clear,theC++standarddoesnotexplicitlyrequirethatcapacityisunchangedbythi

c++ - vector::clear() 幕后和破坏

我研究过STLvector的实现。vector容器被实现为一个动态数组。方法clear()用于破坏vector中的所有元素,它将vector的大小设置为0,但容量保持不变。所以,如果我理解正确的话,所有的元素都被称为它们的析构函数,但是动态分配的内存仍然可用。为了仍然释放它,我们可以这样做:Vec.swap(vector());//Capacity=0.但是假设我们没有使用swap,只是做了一个clear。内部实现(如果我错了请纠正我)大约等于以下内容(以非常简化的方式)://Acontainedtype:structC{intm;C():m(123){}};C*arr=newC[10

c++ - 类 sf::RenderWindow' 没有名为 'clear' 的成员

我至少花了5个小时试图让sfml库与我的QT-creatoride一起工作。我已遵循本教程https://github.com/LaurentGomila/SFML/wiki/Tutorial%3A-Compile-and-Link-SFML-with-Qt-Creator但仍然没有运气。在构建简单代码后,我不断收到类成员不存在的错误。我可以创建类的实例,但在尝试使用时出现多个错误创建对象的成员。我曾尝试查找与库相关的问题、sfml问题,但我不认为我在寻找正确的问题。这有效并显示一个窗口,该窗口在强制程序退出之前永远不会关闭:#includeintmain(){sf::RenderWi

c++ - std::string::reserve() 和 std::string::clear() 难题

这道题从一段代码开始,只是因为我觉得这样更容易看出我在追求什么:/*static*/voidUrl::Split(std::list&url,conststd::string&stringUrl){std::stringcollector;collector.reserve(stringUrl.length());for(autoc:stringUrl){if(PathSeparator==c){url.push_back(collector);collector.clear();//Sabotagesmyoptimizationwithreserve()above!}else{col

c++ - Lint 更喜欢 std :string rather than clear() 上的 erase() 方法

使用Lint,它反复反对在std字符串上使用clear,并希望建议使用不带参数的删除方法。查看文档并执行我想要的操作,即将字符串的大小调整为零个元素,以便该字符串为空且没有任何元素。此时我不想删除字符串,只需从中删除所有成员即可。我的问题是这两种方法有什么区别,有谁知道我应该使用erase而不是clear方法的原因吗? 最佳答案 我看不出任何原因。恰恰相反:我实际上不得不查看引用以查看erase()是否可以在没有参数的情况下调用。erase()用于从字符串中删除一些指定的字符。clear()用于删除字符串的全部内容(但不包括其容量)

c++ - 为什么 qDeleteAll 不在容器上调用 clear

阅读http://doc.qt.io/qt-4.8/qtalgorithms.html#qDeleteAll的文档它要求我们在我们的容器上调用.clear。这是为什么?为什么qDeleteAll不为我们清除容器? 最佳答案 根据http://doc.qt.io/qt-4.8/qtalgorithms.html#qDeleteAll中的Qt文档NoticethatqDeleteAll()doesn'tremovetheitemsfromthecontainer;itmerelycallsdeleteonthem.我认为将qDelete

c++ - cin.clear() 如何清除输入缓冲区?

根据我的阅读,cin.clear()重置标志,但这如何清除输入缓冲区? 最佳答案 cin.clear()对输入缓冲区没有影响。正如您正确阅读的那样,它会重置iostate标志(从技术上讲,用std::ios_base::goodbit替换它们的当前值) 关于c++-cin.clear()如何清除输入缓冲区?,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/20832289/

c++ - str.clear() 和 str = ""之间的区别

我有一个C++std::stringstr,我已将其设置为某个字符串,现在想重置它以便再次使用它。调用str.clear()与调用str=""有区别吗?编辑。澄清一下:我通过向其附加一个char数组缓冲区来重用str:str.append(buf) 最佳答案 没有有效的区别。根据实现的不同,使用clear()可能比将char指针分配给零更快。但是,即使情况并非如此,也更喜欢更清楚地表达您的意图的方法。如果要清除字符串,请使用clear()。如果要分配空字符串,请使用=""。虽然我会注意到,但你说,“所以我可以再次使用它。”又用它干什