【发布时间】:2011-02-11 05:27:28
【问题描述】:
我在 Solaris 上支持一些 c 代码,我看到了一些奇怪的东西,至少我认为是这样的:
char new_login[64];
...
strcpy(new_login, (char *)login);
...
free(new_login);
我的理解是,由于变量是一个本地数组,内存来自堆栈,不需要被释放,而且由于没有使用 malloc/calloc/realloc,所以行为是未定义的。
这是一个实时系统,所以我认为这是在浪费周期。我错过了一些明显的东西吗?
【问题讨论】:
-
这是谁写的?那家伙应该是
free()'d。 -
这是一个错误,但 free 可能知道堆的边界并且可以发现这一点。这个项目也有可能有一个堆分配库,它进行垃圾收集和 free 要么什么都不做,要么是一个宏,如 #define free(x) (x=NULL)
-
@nategoose:如果是这样,那不是那个宏,因为
new_login = 0不应该编译。
标签: c memory-management garbage-collection stack free