【发布时间】:2012-06-15 19:50:31
【问题描述】:
鉴于下一个代码示例,我无法释放参数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;
}
在返回此函数之前,我尝试释放表达式参数中的数据,但似乎无法释放它。
我认为这可能是因为它是一个常量,但我了解到 C 中的字符数组始终应该是一个常量。
我收到的错误消息在free(expression) 行,消息是:expected void* but argument is of type const char * - compiler error
如何丢弃数据expression包含的内存?
【问题讨论】:
-
“不起作用”是什么意思?编译器错误?运行时错误?从用户的鼻子里冒出来的守护进程?
-
“似乎不起作用”和“无法释放”是什么意思?
-
免费(表达式);期望 void* 但参数的类型为 const char*
-
释放和非 malloc'd、realloc'd 或 calloc'd 指针是未定义的行为。
-
你尝试释放
expression,但是如果已经分配在堆栈上,或者一个字符串字面量呢?您应该让调用者决定如何处理它。
标签: c memory-management free character-arrays