草庐IT

back-stack

全部标签

c++ - 解决错误: Stack around the variable 'x' was corrupted的一般方法

我有一个程序在调试时提示我VS2010中的错误:Error:Stackaroundthevariable'x'wascorrupted这为我提供了可能发生堆栈溢出的函数,但我无法直观地看到问题出在哪里。有没有用VS2010调试这个错误的通用方法?是否有可能确定哪个写操作覆盖了不正确的堆栈内存?谢谢 最佳答案 IsthereageneralwaytodebugthiserrorwithVS2010?不,没有。您所做的是以某种方式调用未定义的行为。这些行为未定义的原因是一般情况很难检测/诊断。有时证明是不可能的。但是,通常会导致您的问题

c++ - std::vector 与 std::stack

std::vector和std::stack有什么区别?很明显,vector可以删除集合中的项目(尽管比列表慢得多),而堆栈被构建为仅限LIFO的集合。但是,对于最终项目的操作,堆栈是否更快?是链表还是动态重新分配的数组?我找不到关于堆栈的太多信息,但如果我正确地描绘了它们(它们类似于实际的线程堆栈;push、pop等-以及那个top()方法),那么它们似乎非常适合窗口堆叠管理。 最佳答案 stack不是容器;它是一个容器适配器。它有一个vector、deque或类似的容器,将其存储为实际保存元素的成员。记住:它被声明为:templ

c++ - std::vector 与 std::stack

std::vector和std::stack有什么区别?很明显,vector可以删除集合中的项目(尽管比列表慢得多),而堆栈被构建为仅限LIFO的集合。但是,对于最终项目的操作,堆栈是否更快?是链表还是动态重新分配的数组?我找不到关于堆栈的太多信息,但如果我正确地描绘了它们(它们类似于实际的线程堆栈;push、pop等-以及那个top()方法),那么它们似乎非常适合窗口堆叠管理。 最佳答案 stack不是容器;它是一个容器适配器。它有一个vector、deque或类似的容器,将其存储为实际保存元素的成员。记住:它被声明为:templ

c++ - 为什么 emplace_back 需要移动构造函数

我有以下代码:#include#include#includeclassTestfinal{public:Test(conststd::string&s):s_(s){std::coutv;v.emplace_back("emplace_back");}当允许移动构造函数时,会发生以下情况:[matttest]g++-std=c++11main.cpp&&./a.outconstructing:emplace_back但是,如果移动构造函数被移除:[matttest]g++-std=c++11main.cpp-DNO_MOVE&&./a.out/usr/lib/gcc/x86_64-r

c++ - 为什么 emplace_back 需要移动构造函数

我有以下代码:#include#include#includeclassTestfinal{public:Test(conststd::string&s):s_(s){std::coutv;v.emplace_back("emplace_back");}当允许移动构造函数时,会发生以下情况:[matttest]g++-std=c++11main.cpp&&./a.outconstructing:emplace_back但是,如果移动构造函数被移除:[matttest]g++-std=c++11main.cpp-DNO_MOVE&&./a.out/usr/lib/gcc/x86_64-r

c++ - vector::push_back 坚持使用复制构造函数,尽管提供了移动构造函数

我从gcc收到一个奇怪的错误,不知道为什么。我制作了以下示例代码以使问题更加清晰。基本上,定义了一个类,我将其复制构造函数和复制赋值运算符设为私有(private),以防止意外调用它们。#include#includeusingstd::vector;classbranch{public:intth;private:branch(constbranch&other);constbranch&operator=(constbranch&other);public:branch():th(0){}branch(branch&&other){printf("called!other.th=%

c++ - vector::push_back 坚持使用复制构造函数,尽管提供了移动构造函数

我从gcc收到一个奇怪的错误,不知道为什么。我制作了以下示例代码以使问题更加清晰。基本上,定义了一个类,我将其复制构造函数和复制赋值运算符设为私有(private),以防止意外调用它们。#include#includeusingstd::vector;classbranch{public:intth;private:branch(constbranch&other);constbranch&operator=(constbranch&other);public:branch():th(0){}branch(branch&&other){printf("called!other.th=%

c++ - vector 的 emplace_back

您能解释一下“完美转发”的工作原理吗?我读到vector的emplace_back不需要复制或移动对象,因为它的参数是作为可变参数模板实现的。std::vector::emplace_back(_Args&&...__args)你能详细描述一下吗?为什么不复制也不移动? 最佳答案 emplace_back直接在vector中的正确位置构造元素。想想就好像vectorv;v.emplace_back(a,b,c);转化为(idx为新索引)new(v.data()+idx)T(a,b,c);(实际情况有点复杂,涉及将参数转发为std::

c++ - vector 的 emplace_back

您能解释一下“完美转发”的工作原理吗?我读到vector的emplace_back不需要复制或移动对象,因为它的参数是作为可变参数模板实现的。std::vector::emplace_back(_Args&&...__args)你能详细描述一下吗?为什么不复制也不移动? 最佳答案 emplace_back直接在vector中的正确位置构造元素。想想就好像vectorv;v.emplace_back(a,b,c);转化为(idx为新索引)new(v.data()+idx)T(a,b,c);(实际情况有点复杂,涉及将参数转发为std::

C++ vector push_back

将新对象元素推送到std::vector的正确方法是什么?我希望在vector中分配数据。这是否会将对象newradio复制到vector中,然后在newradio超出范围(例如,超出堆栈)时摆脱它?vectorm_radios;Radionewradio(radioNum);m_radios.push_back(newradio);然后当我释放包含m_radios的对象时,这会释放vector分配的所有内存吗? 最佳答案 std::vector管理自己的内存。这意味着,当调用vector的析构函数时,vector持有的内存被释放。