草庐IT

堆栈iOS

全部标签

C++ 参数的值在 std::vector 中的堆栈帧之间发生变化

我遇到了一个非常奇怪的错误,我希望有人能解释一下。我有一个简单的std::vector,其中V3x是一个3dvector(线性代数类型)。以下代码导致std::length_error抛出异常:std::vectorvertices;intvertexCount=computeVertexCount();vertices.resize(vertexCount);//throwsstd::length_error我已经验证computeVertexCount()返回值35,远低于vector::max_size()所以它不可能要求太多内存。我将异常追溯到std::vector的定义中,到

c++ - 堆栈溢出——静态内存与动态内存

如果你写intm[1000000];在C/C++的main函数中,会出现堆栈溢出的运行时错误。相反,如果你写vectorm;然后在那里push_back1000000个元素,它将运行良好。我很好奇为什么会这样。它们都是本地内存,不是吗?提前致谢。 最佳答案 是的,vector本身是一个自动(堆栈)对象。但是vector持有一个指向其内容的指针(一个内部动态数组),它将被分配到堆上(默认情况下)。为了简化一点,您可以将vector视为在内部执行malloc/realloc或new[]调用(实际上它使用了一个allocator)。编辑:

基于 C++ 堆栈的构造函数/析构函数未按预期工作

我无法理解为什么以下代码没有按照我期望的方式构造和破坏我创建的两个对象:#includeclassMyClass{intmyVar;public:MyClass(intx){myVar=x;std::cout我认为在main中我首先创建一个值为1的对象,然后创建一个值为2的新对象。每个对象都被构建和销毁,因此我希望看到以下输出:constructing1,3456constructing2,6789destructing1,3456destructing2,6789但是,我明白了:constructing1,3456constructing2,6789destructing2,6789

c++ - 为什么 cout 的访问冲突和 printf 的堆栈溢出

我想知道为什么在下面的两个代码片段中,cout和printf会发生访问冲突和堆栈溢出。我想知道为什么第一个代码的访问冲突而不是堆栈溢出。我得到访问冲突的第一个代码:voidTest();voidTest(){staticinti=0;cout我得到StackOverflow的第二个代码:voidTest();voidTest(){staticinti=0;printf("%d\n",i++);Test();}intmain(){Test();return0;} 最佳答案 我假设您了解这两个函数在尝试无限递归后由于堆栈耗尽而崩溃。我认

c++ - 将指向堆栈变量的指针传递给 realloc() 是否有效?

intmain(){charmyString=NULL;realloc(&myString,5);strncpy((char*)&myString,"test",5);}似乎工作正常,但我仍然对堆栈和堆有点困惑。这是允许的吗?如果允许的话,myString是需要手动释放还是超出作用域就释放?编辑:感谢您的回复,所以我认为这同样是非法的//IwantthecodetochangemyStringto"tests"charmyString[5]="test";realloc(&myString,strlen(myString)+2);myString[4]='s';myString[5]=

c++ - 在 C 中返回堆栈数据;它是否正确取消分配?

我在审查一位friend的代码时,就C/C++如何在堆栈上分配内存和管理其释放展开了一场有趣的辩论。如果我要在一个函数中创建一个包含10个对象的数组,但返回该数组,它是在函数弹出时释放(因此使给定数据无效)还是放入堆中(这引发了我们如何释放它?)。示例代码如下:Gene*GetTopTen(){//Create10genes(or10objects,doesn'tmatter)GeneTen[10];//SortoutexternalpooldataSort();//Copyoverdatatothearrayof10objectsfor(inti=0;i非常感谢任何帮助,这正在变成一

c++ - 为什么我们不能在没有 new 关键字的情况下在 Qt 中创建对象(即在堆栈上)?

为什么我们不能在没有new关键字的情况下在QT中创建对象?通常我们创建指向对象的指针,如下所示:QLabel*ql=newQLabel();ql->show()但我想创建一个这样的对象:QLabelql=QLabel();ql.show()这可能吗? 最佳答案 问题在于Qt控件(标签、按钮)处于层次结构中(例如,按钮属于窗体)。而Qt的实现方式要求当一个对象被销毁时,属于它的所有对象也会被销毁。如果您将对象放在堆栈上(这就是“不使用new关键字创建”的真正调用方式),它们将自动销毁。这是C++的特性,它适用于所有程序。如果您在堆栈上

c++ - 使用 MinGW 在 C++ 中生成异常堆栈跟踪

帖子“HowtogenerateastacktracewhenmygccC++appcrashes”解释了应用程序崩溃时如何生成堆栈跟踪。但gcc版本不适用于windowsMinGW。事实上,由于缺少headerexecinfo.h,它甚至无法编译。在windowsxp及更高版本上是否已经有适用于MinGW的东西?编辑Stackwalking可以通过下面提到的步骤实现。但是当我在异常发生后尝试遍历catchblock中的堆栈时,我没有得到想要的结果。我只能得到抛出异常的函数的名称,然后它显示列表-->main-->等等步骤:为帖子提供的第一个答案Win32APIstackwalkwit

无法连接到socket.io错误:XHR轮询错误

嗨,我正在使用带有Laravel应用程序的Homestead。我无法让客户从服务器上接收数据...我的套接字:JS:varserver=require('http').Server();vario=require('socket.io')(server);varRedis=require('ioredis');varredis=newRedis();redis.subscribe('test-channel');redis.on('message',function(channel,message){message=JSON.parse(message);io.emit(channel+':'

c++ - 如何为 Boost.Asio 设计自定义 IO 对象

我有一个代表嵌入式设备的基类(DeviceBase),我想与之通信。该设备可以通过多种方式访问​​,包括USB和TCP套接字。此外,还有一个适用于文件的模拟实现。到现在为止,我只使用了同步读/写调用,所有的实现都只是从基类派生的类,覆盖了读/写函数。这使我能够使用多态指针和容器为应用程序逻辑提供对设备的独立于实现的访问。现在我想使用Boost.Asio来启用简单的异步IO。我找到了这个指南http://www.highscore.de/cpp/boost/asio.html描述了如何编写您自己的扩展,但它非常简单,而且我偶然发现了一些在那里没有讨论的问题。目前,我所有的实现都有不同的构