簡體   English   中英

使用 setJmp longJmp 創建循環

[英]Creating a loop using setJmp longJmp

我正在嘗試使用這些函數創建一個無限循環(未成功)。

我的代碼:

jmp_buf buf1;

void foo(){
    int z = 4, y = 1;
    int v = setjmp(buf1);
    if(v == 0){
     printf("A%d", z);
     longJmp(buf1, 1);
    }
    else if(v == 1){
        printf("B%d", y);
        longjmp(buf1,1);
    }
}

int main(){
    int v = setjmp(buf1);
    if( v == 0){
        printf("C%d", 1);
        foo();
        longjump(buf1,1);
    }
}

我以為它會打印 C1A4B1B1B1....(B1 永遠重復)但我只是得到 C1A4B1 並且程序停止(SEGMENTATION ERROR)。 調用 longJmp 不是總是返回帶有參數 val 的 setJmp 嗎?

想了解我的錯誤在哪里。

編輯:我在得到答案之前復制的代碼是錯誤的,longjmp(buf1,2) 而不是 longjmp(buf1,1)。 此外,我沒有復制導致段錯誤的完整主要代碼。 (調用 foo 后的另一個 longjmp)

在第 15 行之后, longjmp(buf1,2);
v 為 2。

下次重復時,v不為1,function結束。

longjmp(buf1,2); > longjmp(buf1,1);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM