这是我要做什么的要点。


我有一个足够复杂的程序,希望将其组织到一组头文件中
该程序需要在内存中保留一个大型类对象,所有功能都可以使用
因此,类定义位于其自己的头文件中(因为其他头文件独立使用它)
我设置的包含防护似乎有效,因此该类对于整个文件只定义了一次
类数据本身在编译时的大小未知。我正在将数据文件的内容读取到结构中,并且该文件是由用户在运行时选择的
因此,我首先在程序的主要范围内将类对象初始化为空。然后,我想将指向此新创建的类实例的指针传递给读取文件数据的函数。
文件读取功能应分配足够的内存以包含文件中的所有数据,然后再写入由类指针引用的内存。
我希望数据集保存在主范围内,而不是按值传递。


也许这个伪代码可以更好地说明我想做什么。

#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函数访问类成员时,我遇到了段错误。尝试读取

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


或写

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


做这个。但是,崩溃确实发生在以下行之后:“ * data_pt = myclass.myclass(s​​ize);”,这向我暗示了类构造函数正在运行...

有什么想法我可能做错了吗?提前致谢!

最佳答案

*data_pt = myclass.myclass(size);


不应该编译。

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

关于c++ - 将类对象初始化为引用的内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8351384/

10-11 22:58