CPP_TEST.exe中0x7604c128处的未处理异常:0xC00000FD:堆栈溢出

时间:2012-09-05 06:35:21

标签: c++ c malloc free

为什么在我的代码中使用stackover flowfflush时,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;

2 个答案:

答案 0 :(得分:8)

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

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

  

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

为什么你需要这样做?

答案 1 :(得分:1)

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