我是c ++的新手。我使用c ++ 11标准和Mingw64来理解嵌套结构。
但我无法弄清楚以下程序有什么问题。我试图使用指针使用嵌套结构。我不想使用" new"关键字来做到这一点。另外,我想了解我在这个程序中泄漏了记忆。
#include<iostream>
struct model{
int a;
double b;
struct shape {
int c ;
double d;
};
shape *pshape;
};
int main(){
model *m ;
m->a = 2;
m->pshape->c=3;
delete m;
printf("done\n");
}
请帮助我理解错误的地方以及在c ++ 11中使用嵌套结构的最佳和最简洁的方法。
在上面的程序中将指针&#34; pshape&#34;程序超出范围时被销毁?
的问候, 阿维
感谢您的评论。我向你们学习的东西比从书本中学到的要多。您的评论非常丰富,也很幽默。谢谢你们。
根据你的建议,这是我的另一次尝试。如果你认为这有缺陷,请告诉我:
#include<iostream>
using namespace std;
struct model{
int a;
double b;
struct shape {
int c ;
double d;
} *pshape =NULL;
shape sh;
};
int main(){
model m;
model *pm;
pm = &m;
pm->pshape=&pm->sh;
pm->a = 4;
pm->b = 3.24;
pm->pshape->c=101;
cout << pm->a << endl;
cout << pm->pshape->c << endl;
cout << pm->pshape->d << endl;
printf("done\n");
}
答案 0 :(得分:0)
以下是我的工作方式
#include<iostream>
using namespace std;
struct model{
int a;
double b;
struct shape {
int c ;
double d;
}*pshape;
};
int main(){
model m;
model *pm;
pm = &m;
pm->a = 2;
pm->pshape->c=3;
printf("done\n");
}
答案 1 :(得分:0)
不,你没有。 pm->pshape->c=3;
只是覆盖一个随机的,未分配的内存片段,因为pshape并未指向已知的任何地方。如果你真的想避免动态分配,那么完全放弃指针:
#include<iostream>
using namespace std;
struct Model{
int a;
double b;
struct Shape {
int c ;
double d;
} shape;
};
int main(){
Model m;
m.a = 2;
m.shape.c=3;
printf("done\n");
}