我在 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/