2011-10-15 71 views
3

如果我調用一個函數,並用goto函數轉義它,我會漏到棧上嗎?這就像被零除?宇宙會在一個逆轉的大爆炸中內爆嗎?調用函數並使用goto進行轉義:內存泄漏?

這不是我的程序,但它幾乎完全一樣的結構......

bool func() 
{ 
    blah(1337.1337); 
    uber("iasouhfia"); 
    if(random) goto escapeLadder; 
} 

int main(int argc, char* argv[]) 
{ 
    for(int i = 0; i < 5000000; i++) 
    { 
     func(); 
    } 
    escapeLadder: 
    return 0; 
} 
+0

跳轉到一個標籤在不同的功能分配的內存編譯失敗對我來說不正確 第二。 – icktoofay

+1

這是無效的C++,你會在'goto escapeLadder'上得到一個語法錯誤。這實際上是純C嗎? –

+3

那是什麼語言?它看起來像C,但C和C++都不允許在一個不同的函數中使用'goto'來標籤。 –

回答

11

根據draft C++ standard

「標籤的範圍是在它出現的功能「。(6.1標記語句)

因此,您不能goto到函數外部的標籤,因此您的問題包含語法錯誤。

+0

對於C也是如此。在函數之外跳轉需要C++異常或C風格的'setjmp'和'longjmp'。 –

0

第一語法右程序它沒有內存泄漏,因爲沒有不免費內存