2012-07-02 3 views
13

가능한 중복 값을 할당 할 수 없습니다 :
Segmentation Fault when attempting to print value in C변수와 포인터

내가 C에 아주 새로운 해요,하지만 아무 생각이 왜이 프로그램 바꿈이 없습니다. i과 관련이있는 행을 제거하면 프로그램이 컴파일되고 실행되지만, i을 할당하면 더 이상 프로그램을 중단하지 않고 *ptr에 아무 것도 지정할 수 없습니다.

int main(void) 
{ 
    int i; 
    int *ptr; 

    i = 2; 
    *ptr = 5; 
    printf("%d",*ptr); 
} 
+2

[이] (http://stackoverflow.com/questions/11278085/segmentation-fault-when-에 기록하기 전에 라인

ptr = &i; 

을 추가하여 난에 PTR 점을보십시오 어제 인쇄 된 가치에 대한 시도가 거의 없었다. – pb2q

+0

문제는 포인터를 만들었지 만 가리 키도록 지정하지 않았기 때문입니다. 새 메모리를 사용하여 메모리를 할당하거나 i와 같은 변수를 가리킬 수 있습니다. – jlunavtgrad

답변

11

포인터는 초기화되지 않은 값으로 둡니다. 따라서 참조를 취소 할 때 (*ptr) 메모리의 임의의 위치에 액세스하면 세그먼트 화 오류가 발생합니다. ptr 자체 (안 *ptr)에 변수의 주소 (같은 &i) 또는 일부 갓 할당 된 메모리 (같은 malloc(sizeof(int)))을 할당하여 뭔가

포인트 ptr.

+0

그럼 간단히 사용하면 왜 작동합니까? 'int * ptr;' '* ptr = 5;'? –

+0

플랫폼, 컴파일러, 설정에 따라 "작동"하거나 충돌 할 수 있습니다 ... 어느 쪽이든 잘못되었습니다. C는 안전하지 않은 언어이며 메모리 오류를 검사하지 않으므로 예상치 못한 경우 프로그램에 눈에 띄지 않을 수 있습니다. :) – Kos

+1

고마워요! 수동 메모리 관리 언어로 작업 한 적이 없기 때문에이 모든 것이 나에게 새로운 것입니다. 확실히 생각할 것이 많습니다. –

-1

C에서 포인터를 사용하기 전에 기존의 메모리 블록에 대한 포인터를 설정 중 하나가 필요합니다, 당신은 다음과 같이 그것을 위해 메모리를 할당해야합니다.

int *ptr = (int *)malloc(sizeof(int)); 
4

다음은 C에 대한 답변입니다 :

int main(void) { 
    int i; 
    int * ptr = (int *)malloc(sizeof(int)); 

    i = 2; 
    *ptr = 5;  
    printfn("%d",*ptr); 
    free(ptr); 
} 

가 또는 당신은 내가과 * PTR 할당 라인 같은 것을 사용할 수 있습니다 자유가 나왔다 또한

int main(void) { 
    int i; 
    int * ptr; 

    i = 2; 
    ptr = &i;  
    printfn("%d",*ptr); // should print 2 
} 

공지 사항!

1

ptr을 선언했지만 아무 것도 가리 키지 않았습니다. 그럼 당신은 그것이 가리키는 것에 글을 쓰려고했습니다. 이것은 결코 좋은 생각이 아닙니다. 당신이 * PTR