今日、割り当てられたメモリへのポインターを返すことを実験するために、次のコードを書きました。プログラムは正常に動作しますが、いくつか質問があります。
の戻り値にメモリを割り当てるには、
rmch
を使用しますrealloc
。私は関数とそれが何をするのかを理解していますが、割り当てられたメモリのサイズを #c chars に変更することを理解して(char *)
いる行のポイントが何であるかはよくわかりませんが、その部分は何をしますか?ret = (char *) realloc(ret, c * sizeof(char));
realloc(ret, c * sizeof(char));
(char *)
ret
どこかを指す割り当てられたメモリは解放しませんret
が、関数で呼び出されるポインタは解放しますmain
。割り当てられたメモリに何が起こっていますか? 解放されていない場合、どうすれば解放できますか?
コード
#include <stdio.h>
#include <stdlib.h>
char* rmch(char *str, char ch)
{
char *ret = NULL;
int c = 0, i;
for(i = 0; str[i] != '\0'; i++)
{
if(str[i] != ch)
{
c++;
ret = (char *) realloc(ret, c * sizeof(char));
ret[c - 1] = str[i];
}
}
ret[c] = '\0';
return ret;
}
int main(void)
{
char *foo = rmch("f o o", ' ');
printf("%s", foo);
free(foo);
return 0;
}