gpt4 book ai didi

c++ - 导致堆栈溢出的结构构造函数问题

转载 作者:搜寻专家 更新时间:2023-10-31 01:01:12 25 4
gpt4 key购买 nike

下面的两部分代码都大大简化了我的实际代码的独立版本。这些示例足够大以重现问题。下面的第一部分代码工作正常。 section section 试图开始使它成为类的一部分。我试图采取微小的步骤,因为对像下面所示的结构这样的东西的小修改需要在整个代码中进行大量更改,这些代码充满了指针、指向指针的指针和引用,这些都涉及到这个结构。你能告诉我为什么代码的第二部分在它的构造函数中引发堆栈溢出吗?可以做哪些小的改变来修复它?

工作代码:

#include <cstdio>
#include <cstdlib>
#include <iostream>

using std::cout;
using std::endl;

const int maxSize = 3;

struct Item{
int count;
Item *items[maxSize + 1];
};

void foo()
{
Item *p;
p = new Item();
p->count = 2;
cout << p->count << endl;
}

int main(int argc, char *argv[])
{
foo();
return 0;
}

尝试逐步修改整个代码以成为一个类:

#include <cstdio>
#include <cstdlib>
#include <iostream>

using std::cout;
using std::endl;

int maxSize = 3;

struct Item{
int count;
Item *items;

Item()
{
items = new Item[maxSize + 1]; // stack overflow
}
};

void Initialize(int size)
{
maxSize = size;
}

void foo()
{
Item *p;
p = new Item();
p->count = 2;
cout << p->count << endl;
}

int main(int argc, char *argv[])
{
Initialize(5);
foo();
return 0;
}

最佳答案

构造Item的第一个调用调用new Item[maxSize+1],它调用默认构造函数,默认构造函数调用new Item[maxSize+1] ],它调用默认构造,依此类推,直到达到堆栈溢出。

关于c++ - 导致堆栈溢出的结构构造函数问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29574308/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com