2012-09-05 38 views
0

爲什麼這個stackover flow發生在我正在使用fflushfree在我的代碼中。 請幫幫我。CPP_TEST.exe中的0x7604c128未處理的異常:0xC00000FD:堆棧溢出

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; 
+3

那麼,這是什麼:'_tmain(NULL,NULL);'? – atzz

+0

您有使用malloc/free的特定原因嗎? – Simon

+0

@Simon:是的,我想爲結構分配內存並釋放結構的內存。並希望在程序執行重複時重新分配。 –

回答

8

您無法通過函數_tmain()調用_tmain()函數,導致無限遞歸。每次調用都需要在堆棧上分配空間(永遠不會釋放),從而導致您的StackOverflow異常。看看例如Wikipedia太充分了解問題。

除此之外,從您自己的代碼中調用main()函數通常不是一個好主意,因爲它被標準禁止。

§3.6.1.3:函數main不能在程序中使用。

爲什麼你需要這樣做?

+0

但是我釋放內存 –

+0

是的,但是你在堆棧上分配內存,我會延長我的答案。 –

+0

我正在編寫幾乎相同類型代碼的項目中工作。 –

1

系統需要存儲堆棧上的變量,你分配的堆棧變量,那些佔用內存與每一個遞歸調用。它也需要內存來存儲返回指針以及每次遞歸調用。

相關問題