質問

こんにちは私はいくつかのデバッグの概念を学びます。このプログラムではコアダンプをシミュレートしようとしています。コアがダンプされることを期待していますが、コアを生成しません。プログラムは問題なく実行されます。

最初のi ptrに20バイトを割り当てます。1つの新しい文字列をPTRにコピーします。それから私は無料のPTRを印刷するPTRそれをPBLMなしで動作させる。最後に、私は他の文字列を割り当てます私は今回はコアダンプを生成するかもしれません。しかし、私はコアダンプを受けませんでした。誰かにCore Dumpを生成していない理由を説明できます。

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を使用して実行します。

(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
.

役に立ちましたか?

解決

free(ptr)はptrの値を変更しません。対応する場所が再割り当てに利用可能であることを示すだけです。

A block of memory previously allocated by a call to malloc, calloc or realloc is
deallocated, making it available again for further allocations.
Notice that this function does not change the value of ptr itself, 
hence it still points to the same (now invalid) location.
--cplusplus.com
.

それゆえ、あなたが実際にコアダンプを生成したいのなら、何かを確実に試してみてください。

char d=10/0;  //arithematic

char *a=malloc(1);
free(a);
a=NULL;   //this is important after free.
*a=100;
.

他のヒント

解放された後にメモリに書き込むと、何でも起こります。未定義の行動です。コアダンプを入手することもできます。あなたの場合には、それが解放されたとしても、メモリが解放されたとしても、あなたはコアダンプを得ません。BUF mallocステートメントの直前に別のreturn 0を実行してそのメモリに書き込むと、「割り当て後の後に...」という文字列が上書きされます。

DBXでは、printf("After Free memory : %s\n",ptr);ステートメントはアクセスチェックをオンにしたが、DBXなしでアクセスチェックがないため、Access Checkがまったくアクセスできない。

コアダンプをシミュレートするためにこれを行うことができます。

void main()
{
  char *p = NULL ;
  *p = 'A' ;
}
.

ほとんどのプラットフォームでクラッシュします。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top