堆栈内存上的free()

vid*_*con 8 c free stack garbage-collection memory-management

我在Solaris上支持一些c代码,至少我认为它是奇怪的:

char new_login[64];
...
strcpy(new_login, (char *)login);
...
free(new_login);
Run Code Online (Sandbox Code Playgroud)

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

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

nos*_*nos 17

你只能释放()你从malloc(),calloc()或realloc()函数得到的东西.释放堆栈中的某些东西会产生不确定的行为,你很幸运,这不会导致你的程序崩溃,或者更糟.

考虑一个严重的错误,并尽快删除该行.

  • "考虑一个严重的错误,并尽快删除该行".这是一个严重的错误,如果当前代码运行正常,我想尝试在更改之前找出原因.可能有一些我严重误解的东西(比如其中一个令牌实际上是'new_1ogin`或其他东西).我可能会浪费我的时间,但我会是那个偏执狂;-) (2认同)

Pau*_*han 7

不,这是一个错误.

根据免费(3)....

free()释放ptr指向的内存空间,该内存空间必须由之前调用malloc(),calloc()或realloc()返回.否则,或者如果之前已经调用了free(ptr),则会发生未定义的行为.如果ptr为NULL,则不执行任何操作.

所以你的程序中发生了未定义的行为.