2014-05-11 53 views
2

出於某種原因,當我嘗試編譯我的代碼時.exe文件在完成後消失...沒有任何錯誤或警告。在C中設置一個指針爲NULL,而不是編譯

這是我的代碼如下所示:

#include <stdio.h> 
#include <stdlib.h> 

typedef struct student_ 
{ 
    int matnum; 
    char vorname[20]; 
    struct student_ *next; 
} student; 

int main (int argc, char **argv) 
{ 
    student hans; 
    hans.matnum = 12; 

    student peter; 
    peter.matnum = 13; 
    peter.next = NULL; // THIS PART CAUSES MY PROBLEM 

    hans.next = &peter; 

    student *curr = &hans; 
    while(curr != NULL) 
    { 
     printf("matnum: %d\n", (*curr).matnum); 
     curr = curr->next; 
    } 

    return 0; 
} 

我希望它做的是通過迭代CURR並將其設置爲下一每次CURR不是空了。所以如果next是NULL,while循環應該停止。

peter.next = NULL; // THIS PART CAUSES MY PROBLEM 

這就是我想要達到的目標,但它不起作用。 :\


從評論:

我沒有得到一個錯誤。當我輸入「gcc -Wall -o test test.c」時,test.exe就會出現一秒鐘,然後就會被刪除。

+0

這沒有任何意義;要麼編譯,要麼不會,並且您會收到錯誤消息。 –

+1

它是編譯錯誤還是運行時錯誤?你能否複製錯誤文本並粘貼你的問題? –

+0

我沒有收到錯誤。當我輸入「gcc -Wall -o test test.c」時,test.exe就會出現一秒鐘,然後就會被刪除。 – user3233698

回答

6

對此最可信的解釋是您的防病毒軟件正在刪除可執行文件。你的程序在這裏編譯並運行正常。

無論出於何種原因,可疑行將導致您的防病毒軟件與已知病毒相匹配的編譯代碼。當你刪除該行時,它不再與病毒相匹配,但是程序當然會失敗。

暫時停用您的防病毒軟件來確認此假設。

+0

聖牛我把avast關閉了,它現在可以工作了!萬分感謝! – user3233698

+1

@大衛+1它是開箱即用的 –

相關問題