Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 悬空指针_C++ - Fatal编程技术网

C++ 悬空指针

C++ 悬空指针,c++,C++,这段代码是否会导致指针悬空。我猜不是 class Sample { public: int *ptr; Sample(int i) { ptr = new int(i); } ~Sample() { delete ptr; } void PrintVal() { cout << "The value is " << *ptr; } }; void SomeFunc(Sample x) { cout << "Say i am in someFunc " &l

这段代码是否会导致指针悬空。我猜不是

class Sample
{
public:
int *ptr;
Sample(int i)
{
ptr = new int(i);
}

~Sample()
{
delete ptr;
}
void PrintVal()
{
cout << "The value is " << *ptr;
}
};

void SomeFunc(Sample x)
{
cout << "Say i am in someFunc " << endl;
}

int main()
{
Sample s1 = 10;
SomeFunc(s1);
s1.PrintVal();
}
类示例
{
公众:
int*ptr;
样本(int i)
{
ptr=新的整数(i);
}
~Sample()
{
删除ptr;
}
void PrintVal()
{

cout是。当您将s1传递给SomeFunc时,将调用Sample的复制构造函数。默认的复制构造函数执行浅层复制,因此ptr将被删除两次。

是,正如用户所说

~Sample() {
  delete ptr; // Pointer deleted but left dangling
  ptr = NULL; // Pointer is no longer dangling
}

但是,请注意,复制该指针所指向的任何指针都将悬空,除非它们也设置为
NULL

当您通过值将对象传递给SomeFunc()时,将进行浅复制,并且在执行后,ptr指向的内存已被删除。。。
因此,当您在s1上调用PrintVal()函数并尝试取消对指针的引用时,您的程序可能会在此阶段崩溃……您可以删除一次指针,它的内存将失控

您对悬空指针的定义是什么?