释放变量后,我们可以使用它吗?

时间:2012-12-11 20:01:50

标签: c

free(variable);,那么我真的需要再次使用variable's值。它会起作用吗?这是一种不好的做法吗?

5 个答案:

答案 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)

一旦释放,您就不应该重用该变量。如果你再次需要它,可以将你的变量释放出来,直到你需要它为止。

释放变量会释放其内存。虽然变量所在的位置可能仍然保持旧值,但它可能不会。使用已释放的变量并经常导致错误和崩溃是不好的做法。