使用空指针指向c++; 我对C++和面向对象编程都是新的。我的目标是使用空指针指向fstream对象。我有一个包含空指针的结构。我希望使用指针引用fstream对象,以便在其他函数中使用它使用协议缓冲区API(SerializeToCodeStream)写入文件。我希望能够通过重复的函数调用(并从中读取)写入同一文件。顺便说一下,我正在使用协议缓冲区序列化数据并写入文件

使用空指针指向c++; 我对C++和面向对象编程都是新的。我的目标是使用空指针指向fstream对象。我有一个包含空指针的结构。我希望使用指针引用fstream对象,以便在其他函数中使用它使用协议缓冲区API(SerializeToCodeStream)写入文件。我希望能够通过重复的函数调用(并从中读取)写入同一文件。顺便说一下,我正在使用协议缓冲区序列化数据并写入文件,c++,pointers,protocol-buffers,C++,Pointers,Protocol Buffers,我的结构是: typedef struct Store { void *Obj; } st; 创建fstream对象并使用指针指向该对象的代码 st *entry1; fstream output; output.open("file1.txt", ios::out | ios::trunc | ios::binary); entry1->Obj=&output; 这就是我使用指针的地方 int

我的结构是:

    typedef struct Store
    {
      void *Obj;  
    } st;
创建fstream对象并使用指针指向该对象的代码

    st *entry1;
    fstream output;
    output.open("file1.txt", ios::out | ios::trunc | ios::binary);
    entry1->Obj=&output;
这就是我使用指针的地方

     int addToFile( st *entry)
     {
     OstreamOutputStream *_OstreamOutputStream;
     CodedOutputStream *_CodedOutputStream;

 _OstreamOutputStream = new OstreamOutputStream(entry->Obj);
     _CodedOutputStream = new CodedOutputStream(_OstreamOutputStream);

      file.SerializeToCodedStream(_CodedOutputStream); //file is an object of a protocol buffer class
      delete _OstreamOutputStream; //this line seems to be causing a segmentation fault when i run the program
      delete _CodedOutputStream;
      }
编辑:以下是OstreamOutputStream和CodedOutputStream的函数原型

    OstreamOutputStream (ostream *stream, int block_size=-1);
    CodedOutputStream (OstreamOutputStream *output);
代码编译时没有错误,但我在运行程序时确实遇到了分段错误。文件中也没有写入任何内容。
任何关于我做错了什么的答案或其他方法的建议都将不胜感激。谢谢。

您正在删除
OstreamOutputStream
,而
CodedOutputStream
仍在使用它。您必须按照创建对象的相反顺序删除对象,以便在其他对象仍在使用时不会删除任何对象


我怀疑您还有第二个问题:您正在将
fstream
创建为局部变量,这意味着函数返回时它将被销毁,使指针无效。

您的类OstreamOutputStream是否在构造函数中使用无效指针?请在valgrind或调试器下运行程序以查明错误。代码不足。需要OstreamOutputStream的签名。还有“output”的作用域,它本可以在更早的时候解除分配。就是这样。输出是一个局部变量,在使用指针之前被破坏,导致它成为一个悬空指针,从而导致seg故障。谢谢你的回答