malloc
実際には同じポインターで使用していません。あなたはポインタをまったく与えていませんmalloc
。malloc
常に新しいメモリを割り当てます。したがって、変数の割り当ての場合と同じことが起こります。
int a;
a = 14;
a = 20;
はどうなり14
ますか?もうアクセスできません。これmalloc
は、返されたポインターへの参照がなくなったことを意味するため、メモリリークが発生します。
実際に " with the same pointer" を使用したい場合malloc
は、関数に興味があるかもしれませんrealloc
:
int *newPtr;
newPtr = malloc(10 * sizeof(int));
newPtr = realloc(newPtr, 10 * sizeof(int)); //*might leak memory*
そのリンクから:realloc
「ptrが指すメモリブロックのサイズを変更します。関数は、メモリブロックを新しい場所に移動する場合があります(そのアドレスは関数によって返されます)。」
編集:realloc
上記で失敗した場合は NULL を返しますが、が指すメモリnewPtr
は解放されないことに注意してください。この回答に基づいて、これを行うことができます:
void *emalloc(size_t amt){
void *v = malloc(amt);
if(!v) {
fprintf(stderr, "out of mem\n");
exit(EXIT_FAILURE);
}
return v;
}
void *erealloc(void *oldPtr, size_t amt){
void *v = realloc(oldPtr, amt);
if(!v) {
fprintf(stderr, "out of mem\n");
exit(EXIT_FAILURE);
}
return v;
}
その後:
int *newPtr;
newPtr = emalloc(10 * sizeof(int));
newPtr = erealloc(newPtr, 10 * sizeof(int));