2014-05-11 6 views
2

을 컴파일하지 않고 C에서 NULL 포인터를 설정하면 코드를 컴파일하려고 할 때 .exe 파일이 끝난 후에 사라집니다. 오류나 경고없이.어떤 이유로 든

이 내 코드는 모습입니다 :

#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로 설정입니다 이미 NULL 아니었다. 따라서 next가 NULL이면 while 루프가 중지되어야합니다.

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

이렇게하면 좋겠지 만 작동하지 않습니다. : \ 코멘트에서


는 :

I 오류가 발생하지 않습니다. 나중에 "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

@David +1 상자에서 꺼냈다. –

관련 문제