안녕하세요, 저는 일부 디버깅 개념을 배우고 있습니다. 이 프로그램에서 코어 덤프를 시뮬레이션하려고합니다. 코어가 덤프 될 것으로 기대합니다. 그러나 코어를 생성하지는 않습니다. 프로그램은 문제없이 실행됩니다.무료 포인터 메모리 후 값을 다시 할당 할 수
우선 ptr에 20 바이트를 할당합니다. 새 문자열 하나를 ptr에 복사합니다. 그럼 내가 ptr 무료 ptr 다음 pblm없이 인쇄 작업. 마침내 나는 코어 덤프를 생성 할 수있는 시간을 기대하는 다른 문자열을 할당합니다. 하지만 코어 덤프는 없었어. 누구 pls 왜 코어 덤프를 생성하지 설명 할 수 있습니다. 내가 DBX를 사용하여 실행
int main()
{
char *ptr;
ptr =(char*) malloc (20);
strcpy(ptr,"MemoryOperations");
printf("Before Free memory : %s\n",ptr);
free(ptr);
printf("After Free memory : %s\n",ptr);
strcpy(ptr,"MemReassign");
printf("After Re Assigning : %s\n",ptr);
return 0;
}
같은 코드가 해제 된 후 메모리에 작성하는 경우
(dbx) check -all
access checking - ON
memuse checking - ON
(dbx) run
Running: a.out
(process id 19081)
RTC: Enabling Error Checking...
RTC: Running program...
Before Free memory : MemoryOperations
Read from unallocated (rua):
Attempting to read 1 byte at address 0x100101a48
which is 2232 bytes into the heap; no blocks allocated
stopped in _ndoprnt at 0xffffffff671abbf0
0xffffffff671abbf0: _ndoprnt+0x1c04: call _PROCEDURE_LINKAGE_TABLE_+0x620 [PLT] ! 0xffffffff67340d20
(dbx) exit
전화'()'를 중단합니다. –
그 물건과 내가 조사한. 그러나 나는 그 문제를 일으키지 않는 이유를 모른다. – Jeyamaran
C를 쓸 때'malloc'의 반환 값을 캐스팅하지 마십시오. –