C++ 如何将内存分配给作为另一个第二个结构成员的结构的指针?
C++ how to allocate memory to a pointer of a struct which is member of another second struct?
这是代码:
# include<iostream>
#include<stdio.h>
using namespace std;
struct hub
{
int info;
int info2;
};
struct hub2
{
hub *p;
};
int main()
{
hub *pi;
pi = new hub; // allocate memory for pi
pi->info = 30;
pi->info2 = 45;
cout<<pi->info<<" "<<pi->info2; // shows 30 and 45
hub2 obj; // declare a hub2 data type
obj.p = new hub; // allocate memory for obj.p
obj.p = pi; // now obj.p should be identical to what pi points to right?
cout<<"\n"<<obj.p->info<<" "<<obj.p->info2; // This will show 30 and 45
cout<<endl;
delete pi;
cout<<"\n"<<obj.p->info<<" "<<obj.p->info2;//This shows random numbers,why ???
}
为什么我删除分配给pi指针的内存后obj.p不分配内存?
我真的需要一个解决方案 this.I 必须完成一个非常重要的项目,我被困在这个内存分配部分:(
obj.p = pi; // now obj.p should be identical to what pi points to right?
是的,两个指针现在相等。因此,delete pi
等同于 delete obj.p
。完成后,语句
cout<<"\n"<<obj.p->info<<" "<<obj.p->info2;//This shows random numbers,why ???
尝试访问刚刚释放的内存。这会导致未定义的行为。
附带说明一下,这里要小心:
obj.p = new hub; // allocate memory for obj.p
obj.p = pi;
第二条语句覆盖指向由new hub
分配的内存的指针。之后,这样的内存就无法再访问,也无法释放。这是内存泄漏。
obj.p = 新枢纽; // 不需要,可以直接写 obj.p = pi
删除圆周率; //在这条指令之后,pi 是空闲的(但不是自动为 NULL)pi 现在指向一个 "trash" ,这就是你看到随机数的原因。
所以你必须重新分配它。
这是代码:
# include<iostream>
#include<stdio.h>
using namespace std;
struct hub
{
int info;
int info2;
};
struct hub2
{
hub *p;
};
int main()
{
hub *pi;
pi = new hub; // allocate memory for pi
pi->info = 30;
pi->info2 = 45;
cout<<pi->info<<" "<<pi->info2; // shows 30 and 45
hub2 obj; // declare a hub2 data type
obj.p = new hub; // allocate memory for obj.p
obj.p = pi; // now obj.p should be identical to what pi points to right?
cout<<"\n"<<obj.p->info<<" "<<obj.p->info2; // This will show 30 and 45
cout<<endl;
delete pi;
cout<<"\n"<<obj.p->info<<" "<<obj.p->info2;//This shows random numbers,why ???
}
为什么我删除分配给pi指针的内存后obj.p不分配内存? 我真的需要一个解决方案 this.I 必须完成一个非常重要的项目,我被困在这个内存分配部分:(
obj.p = pi; // now obj.p should be identical to what pi points to right?
是的,两个指针现在相等。因此,delete pi
等同于 delete obj.p
。完成后,语句
cout<<"\n"<<obj.p->info<<" "<<obj.p->info2;//This shows random numbers,why ???
尝试访问刚刚释放的内存。这会导致未定义的行为。
附带说明一下,这里要小心:
obj.p = new hub; // allocate memory for obj.p
obj.p = pi;
第二条语句覆盖指向由new hub
分配的内存的指针。之后,这样的内存就无法再访问,也无法释放。这是内存泄漏。
obj.p = 新枢纽; // 不需要,可以直接写 obj.p = pi
删除圆周率; //在这条指令之后,pi 是空闲的(但不是自动为 NULL)pi 现在指向一个 "trash" ,这就是你看到随机数的原因。
所以你必须重新分配它。