0

为什么stackover flow在我使用的地方fflushfree代码中会发生这种情况。请帮我。

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;
4

2 回答 2

8

_tmain()您从函数中无条件地调用该函数_tmain(),导致无限递归。每个调用都需要在堆栈上分配空间(永远不会释放),从而导致您的 StackOverflow 异常。看看例如维基百科太完全理解这个问题。

除此之外,从您自己的代码中调用该main()函数通常不是一个好主意,因为它被标准禁止。

§3.6.1.3:函数 main 不得在程序中使用。

为什么你需要这样做?

于 2012-09-05T06:37:39.577 回答
1

系统需要内存来存储堆栈上的变量,分配堆栈变量,每次递归调用都会占用内存。此外,它还需要内存来存储每个递归调用的返回指针。

于 2012-09-05T06:37:39.173 回答