嵌套结构使用指针c ++

时间:2014-05-29 21:10:19

标签: c++ pointers struct nested

我是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");
}

2 个答案:

答案 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");
}