C++:正确释放指向结构的指针
C++: properly freeing a pointer to a struct
所以我正在尝试学习 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
?这不可能是对的,因为每当我尝试这样做时,我都会在编译时遇到错误。
想法?
guy the_guy
这里是一个局部变量,它的生命周期是由它的作用域定义的!
局部变量的空闲内存只是未定义的行为,你很幸运它崩溃了。
free
只能用于由 malloc
(或 calloc
或 realloc
)分配的内存。
在所有其他情况下,它会导致未定义的行为,所以不要这样做。
所以我正在尝试学习 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
?这不可能是对的,因为每当我尝试这样做时,我都会在编译时遇到错误。
想法?
guy the_guy
这里是一个局部变量,它的生命周期是由它的作用域定义的!
局部变量的空闲内存只是未定义的行为,你很幸运它崩溃了。
free
只能用于由 malloc
(或 calloc
或 realloc
)分配的内存。
在所有其他情况下,它会导致未定义的行为,所以不要这样做。