Оба раздела кода, приведенные ниже, значительно упрощены, изолированные версии моего фактического кода. Примеры достаточно велики, чтобы воспроизвести проблему. Первый раздел кода ниже работает отлично. Секция раздела - это попытка начать делать ее частью класса. Я пытаюсь сделать крошечные шаги, поскольку небольшие изменения в чем-то вроде структуры, показанной ниже, требуют большого количества изменений во всем коде, который полон указателей, указатель на указатели и ссылки, которые все связаны с этой структурой. Можете ли вы рассказать мне, почему вторая часть кода вызывает переполнение стека внутри своего конструктора и какие небольшие изменения могут быть внесены для его исправления?Проблема с конструктором struct, вызывающим переполнение стека
Рабочий код:
#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;
}
Вы только что создали рекурсию ... –