这是我要做什么的要点。
我有一个足够复杂的程序,希望将其组织到一组头文件中
该程序需要在内存中保留一个大型类对象,所有功能都可以使用
因此,类定义位于其自己的头文件中(因为其他头文件独立使用它)
我设置的包含防护似乎有效,因此该类对于整个文件只定义了一次
类数据本身在编译时的大小未知。我正在将数据文件的内容读取到结构中,并且该文件是由用户在运行时选择的
因此,我首先在程序的主要范围内将类对象初始化为空。然后,我想将指向此新创建的类实例的指针传递给读取文件数据的函数。
文件读取功能应分配足够的内存以包含文件中的所有数据,然后再写入由类指针引用的内存。
我希望数据集保存在主范围内,而不是按值传递。
也许这个伪代码可以更好地说明我想做什么。
#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(size);”,这向我暗示了类构造函数正在运行...
有什么想法我可能做错了吗?提前致谢!
最佳答案
*data_pt = myclass.myclass(size);
不应该编译。
使用标准库集合类(例如
std::vector
)来保存数据。关于c++ - 将类对象初始化为引用的内存,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8351384/