c - 堆栈内存中的 free()

标签 c memory-management garbage-collection stack free

我在 Solaris 上支持一些 c 代码,我看到了一些奇怪的东西,至少我认为是:

char new_login[64];
...
strcpy(new_login, (char *)login);
...
free(new_login);

我的理解是,由于变量是本地数组,内存来自堆栈,不需要释放,而且由于没有使用 malloc/calloc/realloc,因此行为未定义。

这是一个实时系统,所以我认为这是在浪费周期。我错过了一些明显的东西吗?

最佳答案

您只能 free() 从 malloc()、calloc() 或 realloc() 函数获得的东西。释放堆栈上的某些东西会产生未定义的行为,你很幸运这不会导致你的程序崩溃,或者更糟。

认为这是一个严重的错误,并尽快删除该行。

关于c - 堆栈内存中的 free(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2693655/

相关文章:

java - 在 Java 中分配大量数组时避免内存碎片

c++ - 为什么 Allocator::reference 被逐步淘汰?

java - 在 Android 应用程序中释放共享资源

c - 这个双循环的复杂性是什么

c - 我如何能够在 C 中创建路由表查找?

c - AVR ATmega2560 上 vsnprintf 的奇怪行为

ios - Xcode 中分析分配的新功能

具有修饰方法和 __del__ 定义的 Python 类不会被垃圾收集 : how do I uncouple the decorated method?

haskell - 混合 Erlang 和 Haskell

c++ - 如何将多个 C/C++ 库合并为一个?