在C程序中为同一个指针调用’free’是否有任何伤害?

如果我有交流计划,比如:

SomeTypePtr my_type; my_type = malloc(sizeof(someType)); /* do stuff */ free(my_type); /* do a bunch of more stuff */ free(my_type); 

为my_type调用’free’会不会造成任何伤害? 在我调用free(my_type)之后,指针再次成为空指针吗?

使用free释放内存区域不会使指针的内容为NULL。 假设你有int *a = malloc (sizeof (int))a0xdeadbeef而你执行free (a)然后执行后仍然包含0xdeadbeef但是在free调用之后这个内存地址不再为你保留。 像你这样的东西租了一段时间用malloc使用了一段时间, free退回公寓然后你可能有一个重复的公寓钥匙,但它不是为你保留。

在已经free内存上执行free会导致双重内存损坏。

  1. 它不会使您的指针为NULL。
  2. 它将释放指针指向的内存,将指针设置为未分配的内存段。
  3. 如果您不在调用之间使用malloc或calloc,它将为您提供分段错误。
  4. “最佳做法是指针在被释放后立即超出范围。” 表示指针应保留在堆栈上,以便它不应显式设置为NULL,因为它最终将超出范围并被释放。

只有你考虑摧毁你的堆“伤害”。 free()不会使指针为null。

在不重复其他答案的情况下,一旦调用free() ,就有责任使空指针无效。 在相同的分配上调用free()两次将导致堆损坏。

 SomeTypePtr my_type; my_type = malloc(sizeof(someType)); /* do stuff */ free(my_type); my_type = 0; // Throw away the pointer to released memory, so cannot either free it or use it in any way. /* do a bunch of more stuff */ free(my_type); // OK now - calling free(0) is safe.