Cでstr_replace関数を構築しようとしています(Cを学ぶため)。少し簡単にするために、2 つのヘルパー関数を作成することにしました。そのうちの 1 つは次のプロトタイプを持ちます。
char * str_shift_right(const char * string, char fill, int32_t n);
文字列を取り、指定された文字列fill
のn
番目の位置に文字を追加します。完全なコードは次のとおりです。
// replace the nth char with 'fill' in 'string', 0-indexed
char * str_shift_right(const char * string, char fill, int32_t n) {
// +1 the null byte, +1 for the new char
int32_t new_size = (int32_t) strlen(string) + 2;
char * new_string = NULL;
new_string = calloc(new_size, sizeof(char));
new_string[new_size - 1] = '\0';
int32_t i = 0;
while (i < strlen(string) + 1) {
// insert replacement char if on the right position
if (i == n) {
new_string[i] = fill;
// if the replacement has been done, shift remaining chars to the right
} else if (i > n) {
new_string[i] = string[i - 1];
// this is the begining of the new string, same as the old one
} else {
new_string[i] = string[i];
}
i++;
}
return new_string;
}
この関数がメモリをリークしていないことを確認したかったので、次のコードを実行してみました。
int main(int argc, const char * argv[])
{
do {
char * new_str = str_shift_right("Hello world !", 'x', 4);
printf("%s", new_str);
free(new_str);
} while (1);
return 0;
}
ただし、アクティビティ モニター (Windows のプロセス マネージャーのような Mac OSX アプリケーション) でメモリ使用量を監視すると、RAM がかなり速く消費され、プログラムが停止すると使用できなくなるようです。実行中。
それはメモリリークとは何ですか?もしそうなら、私は何を間違えましたか?free(new_str)
呼び出しはメモリを解放するはずではありませんか?
ご協力いただきありがとうございます。
編集 1 : PaulR によって発見された 1 つのエラーによって修正されました。問題は残ります。