0

こんにちは、次のファイルにテキストを書き込もうとしています: ofstream

#include <iostream>
#include <fstream>
#include <sstream>
#include <string>
#include <cstring>
#include <stdlib.h>

using namespace std;    


void init_log(ofstream* data_file, ofstream* incl_file, string algo){
    stringstream datafilename;
    datafilename << "report/data/" << algo << ".txt";
    stringstream includefilename;
    includefilename << "report/include/" << algo << ".tex";

    data_file->open(datafilename.str().c_str(), ios::app);
    incl_file->open(includefilename.str().c_str(), ios::app);
}

void write_log(ofstream* data_file, ofstream* incl_file, int size, double timesec){
    stringstream tow_data;
    tow_data << size << " " << timesec <<  endl;
    stringstream tow_incl;
    tow_incl << size << " & " << timesec << " \\\\ \\hline" << endl;

    *data_file << tow_data.str().c_str();
    *incl_file << tow_incl.str().c_str();
}

void close_log(ofstream* data_file, ofstream* incl_file){
    data_file->close();
    incl_file->close();
}
int main (int argc, const char * argv[]){

    double elapsed = 1.0;
    int test = 10;

    ofstream* data_file;
    ofstream* incl_file;

    init_log(data_file, incl_file, "hello");


    write_log(data_file, incl_file, text, elapsed);


    close_log(data_file, incl_file);

    return 0;
}

この XCode を実行すると、exec bad accesses がdata_file->open(datafilename.str().c_str(), ios::app);? どこで間違っていますか?

4

2 に答える 2

6
ofstream* data_file;
ofstream* incl_file;

これらをポインタとして宣言し、メモリを割り当てずに使用しています。これが実行時エラーの原因です。

次のように、自動オブジェクトを作成することをお勧めします。

ofstream data_file;
ofstream incl_file;

次に、それらを参照型として渡します。

void init_log(ofstream & data_file, ofstream* incl_file, string algo){
                     //^^^ reference
}

void write_log(ofstream & data_file, ofstream* incl_file, int size, double timesec){
                     //^^^ reference
}

void close_log(ofstream & data_file, ofstream* incl_file){
                     //^^^ reference
}
于 2011-10-10T07:48:00.913 に答える
2

ストリームへのポインターがあるのは奇妙です。問題は、そのようなポインターを初期化していないにもかかわらず、それらにアクセスしようとしていることです。newいくつかのsがありません。

于 2011-10-10T07:48:23.620 に答える