Mar*_* R. 5 c free memory-management character-arrays
鉴于下一个代码示例,我无法释放参数const char* expression:
// removes whitespace from a characterarray
char* removewhitespace(const char* expression, int length)
{
int i = 0, j = 0;
char* filtered;
filtered = (char*)malloc(sizeof(char) * length);
while(*(expression + i) != '\0')
{
if(!(*(expression + i) == ' '))
{
*(filtered + j) = *(expression + i);
j++;
}
i++;
}
filtered[j] = '\0';
free(expression); //this doesn't seem to work
return filtered;
}
Run Code Online (Sandbox Code Playgroud)
在我返回此函数之前,我尝试释放表达式参数中的数据,但我似乎无法释放它.
我认为这可能是因为它是一个常数,但我了解到C中的字符数组总是应该是常量.
我得到的错误消息是在行,free(expression)消息是:
expected void* but argument is of type const char * - compiler error
如何丢弃数据expression包含的内存?
如果它是一个常量,这意味着它不应该被删除,因为它没有被分配:调用者可以很容易地将基于堆栈的数组传递给你的方法,释放它将是一件坏事.
最常见的约定是,无论代码分配什么数据都应释放数据.释放这个论点真的不是你的常规责任,因为它无法知道这是否是合法的事情.