次のコードには、文字列の最初の 3 文字のメモリ リークが含まれていますか?
char * str = (char*)malloc(21 * sizeof(char));
strcpy(str, "01234567890123456879");
str = str + 3;
free(str);
ありがとう。
次のコードには、文字列の最初の 3 文字のメモリ リークが含まれていますか?
char * str = (char*)malloc(21 * sizeof(char));
strcpy(str, "01234567890123456879");
str = str + 3;
free(str);
ありがとう。
リークよりも悪いのは、(または/ )free
から返されないポインターで呼び出すことは想定されていないことです。リークやクラッシュが発生する可能性があり、他に何があるかはわかりません...あなたがしていることは未定義の動作です。malloc
realloc
calloc
はい、漏れます。
free
によって返されたポインタが必要malloc/realloc/calloc
です。あなたが変わったから、きっと漏れる。
テストでこれを証明したいかもしれませんが、あなたの質問に対する答えは、メモリリークが発生しているにもかかわらず、ポインタをインクリメントすると未定義の動作が発生する可能性があるということだと思います。
あなたの例のどこにも、割り当てられたメモリへの元のポインタを保持しているようには見えないので、私はこれを言っています。ベースアドレス以外の場所を指しているポインターで free が間違ったことをする可能性があります。
あなたがする必要があることを確認するために
1) システムで使用中の RAM を調べます。
2) プログラムを数回実行し、
3) 次に、メモリ使用量をもう一度見てください。
次に、コードを次のように変更して、すべてをもう一度試してください。
char * mem_ptr = (char*)malloc(21 * sizeof(char));
char * str = mem_ptr;
strcpy(str, "01234567890123456879");
str = str + 3;
free(mem_ptr);