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()函数得到的东西.释放堆栈中的某些东西会产生不确定的行为,你很幸运,这不会导致你的程序崩溃,或者更糟.
考虑一个严重的错误,并尽快删除该行.
不,这是一个错误.
根据免费(3)....
free()释放ptr指向的内存空间,该内存空间必须由之前调用malloc(),calloc()或realloc()返回.否则,或者如果之前已经调用了free(ptr),则会发生未定义的行为.如果ptr为NULL,则不执行任何操作.
所以你的程序中发生了未定义的行为.