【发布时间】:2011-09-20 19:13:45
【问题描述】:
如果我说:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
char *x;
char *y;
int main() {
x = malloc(sizeof("Hello, world!"));
strcpy(x, "Hello world!");
y = "Hello, world";
free(x);
fprintf(stderr, "okay");
free(y);
}
然后,很明显,程序将打印“okay”,然后因为“未分配被释放的指针”而死亡——显然,因为字符串是字符串文字。
我想编写一个函数,它在给定字符串文字时不执行任何操作,但在给定非字符串文字时调用 free。这可能吗?如果可以,怎么做?
【问题讨论】:
-
Nope :) 这就是内存管理的乐趣所在——开发人员负责跟踪这些有趣的事情。
-
@DeadMG,我相信这同样适用于 C 和 C++。
-
不要在文字上免费调用。这是最简单的解决方案。
-
@mark 文字是在堆上还是栈上?如果两者都不是,那么这如何与另一个问题重复。其他问题。
-
@David:实现这一目标的简单方法是遵循更一般的建议:始终将字符串文字的地址分配给
const char *,而不是char *。