[解決済み] free()でのエラー: サイズが無効です。
質問
#include <bits/stdc++.h>
using namespace std;
class student
{
string name;
string reg;
public:
void getdata()
{
getline(cin,name);
getline(cin,reg);
}
void printdata()
{
cout<<name<<"\t"<<reg<<endl;
}
};
int main()
{
ifstream fin;
ofstream fout;
student obj;
fout.open("google.txt",ios::out|ios::binary);
obj.getdata();
fout.write((char*)&obj,sizeof(obj));
fout.close();
student obj2;
fin.open("google.txt",ios::in|ios::binary);
fin.read((char*)&obj2,sizeof(obj2));
obj2.printdata();
fin.close();
return 0;
}
私は、オブジェクトのファイル操作の基本的な読み取りと書き込み操作を試しています。
しかし、上記のコードを実行した後、私は正常に書き込みと読み取りを行うことができますが、私はエラーメッセージを取得します。
*** Error in ./io: free(): invalid size: 0x00007ffea93f64b0 ***Aborted (core dumped)
入力
ファイヤーブレード
17HFi394
出力する。
ファイアーブレード , 17HFi394
とエラーメッセージが表示されます。
*** Error in ./io: free(): invalid size: 0x00007ffea93f64b0 ***Aborted (core dumped)
どなたかこのエラーについて説明し、この問題を克服するために何をすべきかを教えてください。
解決方法を教えてください。
この問題は、あなたが生の
std::string
オブジェクトをファイルに保存し、それを再び読み込むことができます。その結果
未定義の動作
.
これは
std::string
は基本的に(そして単純化して)実際の文字列データへのポインタに過ぎません。文字列オブジェクトを書き込むときにポインタを書き、ファイルからオブジェクトを読み出すときにポインタを読みます。問題は、今あなたが
に
文字列オブジェクトの両方が同じデータを指しています。最初のオブジェクトがスコープ外に出て破壊されると、文字列データが解放され、もう一方のオブジェクトには、もはやあなたのプロセスでは所有していないデータへの無効なポインタが残されます。2番目のオブジェクトが破壊されると、すでに解放されているデータを解放しようとします。
しかも、これは1つのプロセスでオブジェクトの保存と読み込みを行った場合のみです。同じプログラムであっても)別のプロセスでオブジェクトをロードしようとすると、さらに悪いことになります。
データをファイルに保存するには、次のようなことを調べておく必要があります。 シリアライズ .
関連
-
[解決済み】 unsigned int vs. size_t
-
[解決済み] エラー: '...'のメンバー '...'が非クラス型である場合のリクエスト
-
[解決済み】コンストラクターでのエラー:識別子を期待されますか?
-
[解決済み】Visual Studio 2015で「非標準の構文。'&'を使用してメンバーへのポインターを作成します」エラー
-
[解決済み】C++のGetlineの問題(オーバーロードされた関数 "getline "のインスタンスがない
-
[解決済み】エラー:free(): 次のサイズが無効です(fast)。
-
[解決済み】浮動小数点数の乱数生成
-
[解決済み] error: 'this' 引数に xxx を渡すと修飾子が消える
-
[解決済み】C++は文脈自由か文脈依存か?
-
[解決済み】malloc()とfree()はどのように動作するのですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】構造体のベクター初期化について
-
[解決済み】coutはstdのメンバではない
-
[解決済み】C++でint型に無限大を設定する
-
[解決済み】C++ 非推奨の文字列定数から「char*」への変換について
-
[解決済み】 != と =! の違いと例(C++の場合)
-
[解決済み】抽象クラス型の無効なnew-expression
-
[解決済み】IntelliSense:オブジェクトに、メンバー関数と互換性のない型修飾子がある
-
[解決済み】浮動小数点例外エラーが発生する: 8
-
[解決済み] 解決済み] `pthread_create' への未定義の参照 [重複] [重複
-
[解決済み] 数値定数の前にunqualified-idを付けて、数値を定義することを期待する。