メモリ内の文字列を指すcharポインタがあるとします。
その文字列をメモリ内の別の場所にコピーしたいとします。
void cpy(char **dst, char *src)
{
*dst = (char *) realloc(*dst, strlen(src) + 1);
memcpy(*dst, src, strlen(src) + 1);
}
(メモリ割り当てが成功し、src
NULLではないと仮定します)
この関数を次のように呼び出すとどうなりますか?
char *str = malloc(14);
memcpy(str,"hello, world!", 14);
cpy(&str,str+7);
srt
今、私は文字列を指すことを期待します"world!"
(私のテストではそれが行います)。
しかし、私が懸念しているのは、この呼び出しcpy
で*dst
、実際には同じsrc
文字列の異なる場所を指していることです。また、を呼び出すと、このメモリが解放される可能性があります。しかし、次の行では、その場所から。を使用してコピーしようとしています。 realloc
*dst
memcpy
したがって、質問は次のとおりです。何か問題がありますか?
言い換えれば、メモリを解放してすぐに使用しても大丈夫ですか?
ありがとう。
注:realloc
この例は、で取得されたメモリで呼び出されるように更新されましたmalloc
。