我今天写了下面的代码来试验返回分配内存的指针。该程序运行良好,但我确实有几个问题:
为
rmch
我使用的返回值分配内存realloc
。我了解该功能以及它在大多数情况下的作用我只是不太确定我理解的将分配的内存大小调整为#c 字符(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;
}