Необработанное исключение в 0x7604c128 в CPP_TEST.exe: 0xC00000FD: переполнение стека

Почему это stackover flow происходит где я использую fflush а также free в моем коде.
Пожалуйста, помогите мне.

using namespace std;

struct abc{
int x;int y;
}abc;

int _tmain(int argc, _TCHAR* argv[])
{
struct abc *xyz = (struct abc *) malloc(sizeof(struct abc));
xyz->x = 5;
printf("%d\n", xyz->x);
//system("pause");
free(xyz);
// xyz = NULL;
fflush(stdout);
_tmain(NULL, NULL);

return 0;
}

Отредактированный код:

xyz:
struct abc *xyz = (struct abc *) malloc(sizeof(struct abc));
xyz->x = 5;
printf("%d\n", xyz->x);
//system("pause");

free(xyz);
xyz = NULL;
fflush(stdout);
goto xyz;

0

Решение

Вы безоговорочно звоните _tmain() функция от вашего _tmain() функция, вызывающая бесконечную рекурсию. Каждый вызов должен выделять место в стеке (которое никогда не освобождается), вызывая исключение StackOverflow. Взгляните, например, на Википедия слишком полно понимаю проблему.

Кроме того, называя main() Функция из вашего собственного кода обычно не очень хорошая идея, так как она запрещена стандартом.

§3.6.1.3: Функция main не должна использоваться в программе.

Зачем вам это нужно?

8

Другие решения

Системе нужна память для ваших переменных в стеке, вы выделили переменные стека, которые занимают память при каждом рекурсивном вызове. Также требуется память для хранения указателя возврата при каждом рекурсивном вызове.

1

По вопросам рекламы [email protected]