C++:正确释放指向结构的指针

时间:2021-01-07 15:11:42

标签: c++ pointers struct null free

所以我正在尝试学习 C++(和一点点 C)并且想知道是否有一种真正正确的方法来释放指向结构的指针。下面有一个我正在谈论的例子。

#include <iostream>

struct guy {
  int the_data;
};

int main() {
  guy the_guy, *ptr;

  ptr = &the_guy;
  ptr->the_data = 3;
  ptr = NULL;
  free(ptr);
  std::cout << "whaddup guy's data: " << the_guy.the_data <<std::endl;
}

我很好奇,因为我看到的答案说您需要在释放指针后将其设置为 NULL?这不可能是正确的,因为每当我尝试这样做时,我都会在编译时遇到错误。

想法?

1 个答案:

答案 0 :(得分:3)

guy the_guy 这里是一个局部变量,它的生命周期是由它的作用域定义的! 局部变量的空闲内存只是未定义行为,你很幸运它崩溃了。

free 只能用于由 malloc(或 callocrealloc)分配的内存。 在所有其他情况下,它会导致未定义的行为,所以不要这样做。

相关问题