포인터가 초기화되지 않았습니다 (즉, 포인터를 아무 것도 가리 키지 않음). 초기화되지 않은 모든 지역 변수는 그 값이 불확실하고 무작위이기 때문에 어디에서 가리키는 지 알 수 없습니다.
다음이 임의의 위치에 숫자를 쓰려고 시도하면 정의되지 않은 동작이 발생합니다.그것은 프로그램을 충돌 할 수 있습니다, 또는 도 nasal demons의 원인, 정의되지 않은 행동은 예측할 수 없으며, 그것은 일, 그것은 예상치 못한 원인 일이 일어날 수도있다.
당신은 더 번 이득이 정의되지 않은 동작의 두 인스턴스에 연결되는 문자열로 그 포인터를 사용하려고 : printf
문자열 종결을 찾아 바이트 후에 바이트를 읽을 때 포인터가 한 번 더 초기화되지 않은, 그리고 일단 때문에 .
은 정의되지 않은 동작이 다른 경우가 있습니다, 그것은 당신의 main
기능이 올바르게 정의되지 않는 것입니다. int
을 반환하고 void
인수 또는 int
및 char**
인수를 취해야합니다. 이것은 C 스펙에 있습니다. 적절한 main
을 가지고 있지 않은 것은 기술적으로 불법 프로그램이지만, 불행히도 컴파일러가 사용하지 못하게하는 것이 일반적입니다.
$ gdb ./myProgram
...
(gdb) run
Starting program: /home/someone/myProgram
Program received signal SIGSEGV, Segmentation fault.
0x0000000000400518 in main() at myProgram.c:5
5 *ptr=100;
(gdb)
을하거나 충돌 및 코어 덤프를 생성 한 후, 당신은 코어 덤프를 사용하여 디버거를 실행합니다 :
를
는 디버거에서 프로그램을 실행하거나, 디버거에서 사용하려면 그런데
$ ./myProgram
Segmentation fault (core dumped)
$ gdb ./myProgram core
...
Reading symbols from /home/someone/myProgram...done.
[New LWP 4655]
Core was generated by `./myProgram'.
Program terminated with signal 11, Segmentation fault.
#0 0x0000000000400518 in main() at myProgram.c:5
5 *ptr=100;
(gdb)
디버깅 정보 (이하 '심볼'디버거 판독) 프로그램은 -g
플래그 컴파일되어야한다.
질문 문언은 약간 모호합니다. 그러나 질문은 프로그램이이 예제보다 덜 사소한 경우에 대비하여 "핵심 덤프 파일을 읽는 방법"에 관한 문제라고 생각합니다. – DCoder
@DCoder 예, 제발 부탁드립니다. ... –
@Q_SaD 내 대답을 업데이트했습니다. –