본문 바로가기
Ghost의 C Note(노트)/Ghost의 C언어 다양한 오류들

변수와 포인터 변수에서 나오는 오류들..

by dark ghost 2012. 10. 24.
728x90
반응형

변수와 포인터 변수에서 나오는 오류들.

그림 1) 포인터 변수에 참조 변수를 수정 하기전.

1. 일단 처음 오류는 포인터 번수에 참조 할 변수를 잘못 참조하게 되면 생기는 오류를 하여 보았다. 그림 1)은 정상 적인 참조 일때이다.

 

그림 2) 포인터 변수에 참조 변수를 수정 하기전 화면에 출력.

2. 그림 1)의 소스를 컴파일 하여 실행시켜 보았다. 그림 2)처럼 아무 문제 없이 나온다면 정상 적인 것이다.

 

그림 3) 포인터 변수에 참조 변수를 수정 후.

3. 그림 1) 소스에서 포인터 변수에 참조할 변수를 임의로 &를 제거 하여 보았다.

 

그림 4) 포인터 변수에 참조 변수를 수정 후 화면에 출력.

4. 그림 3)에서 포인터 변수에 참조할 변수를 임의로 &를 제거 하여 컴파일 후 실행 시켜 보았다. 그림 4) 처럼 심각한 메시지가 뜨면서 *iNumP 의 참조하는 주소가 이상한 값을 출력 하는 것도 볼 수 있다. 아무튼 포인터 변수 정의시 &를 빠져 먹는 실수는 안해야 될 듯 하다.

 

그림 5) 포인터 변수에 참조 변수를 2번째 수정 후.

5. *iNumP 변수가 참조하는 변수에 *를 넣어 보았다. 물론 잘못된 참조 법이다.

 

그림 6) 포인터 변수에 참조 변수를 2번째 수정 후 출력.

6. *iNumP 변수가 참조하는 변수에 *를 넣어 컴파일을 시켜보았다. error C2100:  illegal indirection 이라는 에러 메시지가 뜨며, 컴파일이 되지 않는다.

 

그림 7) iNum 변수를 수정 하기전.

7. 이 번에는 printf() 함수에서 iNum 변수를 수정 하여 보려 한다. 그림 5)는 정상적일때의 코드이다.

 

그림 8) printf() 함수에서 iNum을 수정 하기전 출력.

8. 이번에는 printf()함수 호출시 iNum을 수정 하기전에 화면에 출력한 화면이다. iNum 의 값은 : 30에 체크가 되어 있는데 잘 못 된 것이다.

 

그림 9) printf 문에서 iNum 에 &대신 *로 수정.

9. 다음은 printf 문에 있는 &iNum을 *을 바꿔서 *iNum으로 변경 한 뒤 컴파일을 실행 해 보겠다.

 

그림 10) printf 문에서 iNum 에 &대신 *로 수정 후 출력.

10. printf 문에서 &iNum 을 *iNum 으로 변경하여 컴파일을 하였는데 에러가 나타났다. 그림 6) 에서 떴던 에러 메시지와 같은 메시지가 뜬다. 에러 메시지 확인은 그림 10) 에서 확인 할 수 있다.

 

그림 11) printf 문에서 &iNum을 iNum 으로 수정.

11. 다음으로 같은 구문에서 이젠 &iNum 에서 그냥 iNum 으로 수정 하였다.그림 11)을 참조 하면된다.

 

그림 12) printf 문에서 &iNum을 iNum 으로 수정 후 출력.

12. 그림 11)에서 처럼 &iNum 에서 그냥 iNum 으로 수정 한후 컴파일을 하였는데 아무런 문제없이 컴파일은 되었다. 하지만 그림 12) 에서 보는 것 처럼 주소 값이 제대로 나오지 않는 오류가 생겼다. 그리고 이런 오류 말고도 다른 오류들이 더 있는데 그 오류들은 다음에 더 올리도록 할 것이다. 그리고 이런 오류들을  보게 된다면 혹시라도 의심을 해보자. 포인터 변수를 잘 못 쓰고 있지 않은지를.... 

 

 

 

 

 

 

 

 

 

 

 

 

728x90
반응형

댓글