free(variable);
,那么我真的需要再次variable's
使用价值。它会起作用吗?这是一个不好的做法吗?
问问题
1948 次
5 回答
11
它会起作用吗?
身份证。这是未定义的行为,因此它可能有效,也可能无效。
这是一个不好的做法吗?
是的。
于 2012-12-11T20:03:24.720 回答
6
它会工作得很好!
int *f = malloc( 128 );
free( f );
printf( "F has the value: %p\n", f );
现在,如果您想要 中的值,*f
那是另一个问题。
于 2012-12-11T20:38:52.243 回答
4
请参阅免费手册页():
free()函数释放ptr指向的内存空间,
这意味着当您调用malloc()
您拥有它所指向的内存时,一旦您调用,您就会确切地知道那里有什么:
free(variable);
它不再属于你。所有的赌注都取消了。一旦内存被释放,就没有充分的理由访问内存。如果你真的需要它,你不能释放它。如果您必须释放它,请复制数据(如果这是您需要的)
于 2012-12-11T20:09:21.807 回答
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
,我可以为它分配一个新的指针值variable
并继续使用它。从这个意义上说,我可以继续使用variable
.
然而,这将不起作用(或者至少,它的行为是undefined):
int *variable = malloc(sizeof *variable);
*variable = 1;
free(variable);
*variable = 2;
调用后,原来指向free
的内存可能已经不可variable
用了。尝试写入它可能会导致崩溃或损坏您在其他地方使用的内存,或者它可能看起来工作得很好。
于 2012-12-11T20:52:16.667 回答
0
释放后,您不应重复使用该变量。如果您再次需要它,请释放该变量,直到您需要它为止。
释放变量会释放其内存。虽然变量所在的位置可能仍保留旧值,但可能不会。使用已释放的变量是不好的做法,并且通常会导致错误和崩溃。
于 2012-12-11T20:06:30.423 回答