free(variable);
,那么我真的需要再次使用variable's
值。它会起作用吗?这是一种不好的做法吗?
答案 0 :(得分:11)
它会起作用吗?
IDK。这是未定义的行为,因此它可能会或可能不会起作用。
这是一种不好的做法吗?
是
答案 1 :(得分:7)
它会工作得很好!
int *f = malloc( 128 );
free( f );
printf( "F has the value: %p\n", f );
现在,如果你想要*f
中的值,那就是另一个问题。
答案 2 :(得分:4)
免费查看the man page():
free()函数释放ptr,
指向的内存空间
这意味着当你打电话给malloc()
你拥有它所指向的记忆时,一旦你打电话,你就知道那里有什么:
free(variable);
它不再归您所有。所有赌注都已关闭。一旦释放,就有没有充分理由访问内存。如果你真的需要它,你就无法释放它。如果您必须释放它,请复制数据(如果这是您需要的)
答案 3 :(得分:2)
变量仍可供使用; 它指向的堆内存不是。
IOW,这是完全合理的(如果做作的话):
int *variable = malloc(sizeof *variable);
*variable = 1;
printf("%p: %d", (void *) variable, *variable);
free(variable);
variable = malloc(sizeof *variable);
*variable = 2;
printf("%p: %d", (void *) variable, *variable);
调用free
后,我可以将 new 指针值分配给variable
并继续使用它。从这个意义上说,我可以继续使用variable
。
然而,这不工作(或至少,其行为未定义):
int *variable = malloc(sizeof *variable);
*variable = 1;
free(variable);
*variable = 2;
调用free
后,variable
使用指向的内存可能不再可用。尝试写入它可能会导致崩溃或您在其他地方使用的内存损坏,或者出现以便正常工作。
答案 4 :(得分:0)
一旦释放,您就不应该重用该变量。如果你再次需要它,可以将你的变量释放出来,直到你需要它为止。
释放变量会释放其内存。虽然变量所在的位置可能仍然保持旧值,但它可能不会。使用已释放的变量并经常导致错误和崩溃是不好的做法。