大家好,本人接触VC没有多久,就是一个菜鸟,刚遇到如下的问题,想请教大家一下:
struct test
{
    int age;
    CArray<int,int> *money;
    struct test *next;
};
有这样一个结构体,内部使用了CArray容器存储大量的数据。每次都会将其他函数处理得到的数据存储到结构体test中,为了能将数据存储到CArray中,其他函数中定义为:CArray<int,int> temp; money=&temp。这样可以直接将数据存储到结构体的CArray指针变量中。但是在后续从结构体读数据时:
struct test *tmp_var; 
tmp_var->money->GetAt(i);  //这样读取数据报错,说内存不能read
不知道该如何解决,望大侠指点指点,在线等。VC编程

解决方案 »

  1.   

    struct test *tmp_var只是结构体指针,系统没有为其开辟存储单元,应该为struct test tmp_var;或者 struct test *tmp_var = new struct test;
      

  2.   

    struct test *tmp_var=new struct test;
    tmp_var=test_head;(test_head是结构体的头指针)
    int t=tmp_var->child->GetAt(0);//这样访问还是出错!
      

  3.   

    //你的指针还没学好
    struct test *tmp_var=new struct test;//分配了一个新的指针tmp_var=test_head;(test_head是结构体的头指针)
    //又改变了新的地址,那原先分配的指针根本没用到,那会造成内存泄露int t=tmp_var->child->GetAt(0);//这样访问还是出错!
    你的程序取test_head指针里的数据,
    那你要确保test_head是一个可用的test 指针
    并且你的test_head的money必须分配地址给你举个例字
    test a;//这里也可以使用new 分配空间
    a.money=new CArray<int,int>;//要记得释放指针
    a.money->Add(1);a.money->Add(2);
    tmp_var=&a;
    int t=tmp_var->money->GetAt(0);
    ---
    //delete a.money
      

  4.   

    回复:qimiao77
    太感谢你了,对结构体的操作不是很熟,以前直接使用CArray<> *test时,存储访问都没有问题。原来结构体中涉及到指针的对象,在存储数据时必须得分配地址。