将类对象初始化为引用的内存

时间:2011-12-02 03:17:44

标签: c++ class pointers reference initialization

这是我要做的事情的要点。

  • 我有一个足够复杂的程序,我想把它组织成一组头文件

  • 程序需要在内存中保留一个大类对象,可用于所有函数

  • 因此,类定义在其自己的头文件中(因为其他头文件独立使用它)

  • 包含我设置的警卫似乎正在工作,因此该类仅为整个文件定义一次

  • 类数据本身在编译时具有未知大小。我正在将数据文件的内容读入结构中,并且用户在运行时选择该文件

  • 所以,我首先在我的程序的主要范围内将类对象初始化为空。然后,我想将一个指向这个新创建的类实例的指针传递给一个读取文件数据的函数。

  • 文件读取功能应该分配足够的内存来包含文件中的所有数据,然后写入类指针引用的内存。

  • 我希望数据集保存在主范围内,而不是按值传递。

也许这个虚拟代码会更好地说明我想要做的事情。

#include <class_def.h>
#include <readfile.h>
#include <otherfunctions.h> // Will perform a calculation based on class data in memory

myclass data;

int main()
{
    read_to_memory(&data);
    some_other_function(&data);
}

--------------------

int read_to_memory(myclass* data_pt) // Function from readfile.h
{
    // Get filename from user input
    // Determine filesize, from which the size of class members is derived
    // Then initialize class object referred to by data_pt
    *data_pt = myclass.myclass(size);

    // Then, start writing to memory with file data
    // Is actually a big "for" loop
    (*data_pt).member1[0] = <value read from file>;
    (*data_pt).member2[0] = <value read from file>;
    ...
    (*data_pt).member1[N] = <value read from file>;
    (*data_pt).member2[N] = <value read from file>;
}

现在,当我尝试从read_into_memory函数访问类成员时,我遇到了seg错误。尝试阅读

cout << (*data_pt).member1[0]) 

或写

(*data_pt).member1[0] = <value read from file>;

这样做。然而,崩溃确实发生在行之后:“* data_pt = myclass.myclass(s​​ize);”,这告诉我类构造函数正在工作......

任何想法我可能做错了什么?提前谢谢!

2 个答案:

答案 0 :(得分:3)

*data_pt = myclass.myclass(size);

不应该编译。

使用标准库集合类(例如std::vector)来保存数据。

答案 1 :(得分:1)

请使用一些理智的C ++ STL集合来保存listmapdeque等数据。不要试图以某种方式伪造它,这是不值得的。