memcpyでオブジェクトをコピーするときのダブルフリーまたは破損エラー

ジョニーリン

私は次のコードを持っています:

#include <iostream>
#include <string>
#include <cstring>

struct test {
    std::string name;
    size_t id;
};


int main() {
    test t;
    t.name = "147.8.179.239";
    t.id = 10;

    char a[sizeof(t)] = "";
    std::memcpy(a, &t, sizeof(t));

    test b;
    std::memcpy(&b, a, sizeof(t)); 

    std::cout << b.name << " " << b.id << std::endl;
}

コンパイルして実行すると、次のエラーが発生します。

147.8.179.239 10
*** Error in `./test': double free or corruption (fasttop): 0x0000000000bf9c20 ***
Aborted (core dumped)

コードで結果を出力できることがわかりました。しかし、どうすればこのエラーを修正できますか?

dbush

現状を使用memcpyすることによりstd::stringまったく同じ2つのオブジェクトが得られます。これには、内部で使用する可能性のあるすべてのポインターが含まれます。したがって、各オブジェクトのデストラクタが実行されると、両方が同じポインタを解放しようとします。

これが、コピーコンストラクターを使用するか、一方を他方に割り当てる必要がある理由です(つまり、オーバーライドを使用しますoperator=)。これらの実装の違いを認識し、正しく処理します。つまり、宛先オブジェクトに個別のメモリバッファを割り当てます。

に含まれる文字列を抽出する場合は、オブジェクトを既知の表現std::stringシリアル化する必要があります次に、それを逆シリアル化して元に戻すことができます

std::string s1 = "hello";
printf("len=%zu, str=%s\n",s1.size(),s1.c_str());

// serialize
char *c = new char[s1.size()+1];
strcpy(c, s1.c_str());
printf("c=%s\n",c);

// deserialize
std::string s2 = c;
printf("len=%zu, str=%s\n",s2.size(),s2.c_str());

他のクラスオブジェクトに対しても同様の手順を実行します。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

デストラクタが理解できない出力を返します( `./a.out 'のエラー:ダブルフリーまたは破損(fasttop):)

分類Dev

ダブルフリーまたは破損(ファストトップ)エラーを把握できません

分類Dev

参照を削除するときにダブルフリーまたは破損

分類Dev

Flatbuffer Unionを使用すると、ダブルフリーまたは破損エラーが発生しました

分類Dev

cでダブルフリーまたは破損(アウト)中止(コアダンプ)を克服する方法

分類Dev

Cは、whileループ内の配列で検索番号を取得できず、「ダブルフリーまたは破損」エラーが発生します

分類Dev

エラー:破棄されたオブジェクトにアクセスできません。このエラーの一般的な原因は、依存性注入から解決されたコンテキストを破棄することです

分類Dev

ダブルフリーまたは破損エラー

分類Dev

Glibcエラー:ダブルフリーまたは破損

分類Dev

ファイルパスのRの光沢のあるリストからサブフォルダーを選択すると、タイプ 'closure'のオブジェクトのエラーはサブセット化できません

分類Dev

フォームコントロールタイプをチェックするときのVBAランタイムエラー1004「アプリケーション定義またはオブジェクト定義エラー」

分類Dev

ダブルフリーまたは破損(アウト)エラーがどこから発生しているのかをどのように知ることができますか?

分類Dev

オブジェクトがstd :: memcpyによってコピーされるのを防ぐことはできますか?

分類Dev

この関数内の「ダブルフリーまたは破損」エラー?

分類Dev

ダブルフリーまたは破損エラーを修正しましたが、なぜ発生するのですか?

分類Dev

pthreads「ダブルフリーまたは破損(アウト)」エラー

分類Dev

マルチスレッドサーバーは、複数のクライアントが接続しようとすると、「破棄されたオブジェクトにアクセスできません」というエラーを表示します

分類Dev

'破棄されたオブジェクトにアクセスできません。このエラーの一般的な原因は、依存性注入から解決されたコンテキストを破棄することです

分類Dev

C ++オブジェクトを返すときのコピーと破棄

分類Dev

char **を使用する場合のダブルフリーまたは破損

分類Dev

オブジェクトをシリアル化しようとしたときの「と同じオブジェクトではありません」エラー

分類Dev

あるスライドから別のスライドにOLEオブジェクトをコピーすると、PowerPointが破損する

分類Dev

フリーズされたオブジェクトをコピーすると、TypeScriptでコンパイルの問題が発生します

分類Dev

Filebeatが提供するもの:[エラー]のオブジェクトマッピングはフィールド[エラー]をオブジェクトとして解析しようとしましたが、具体的な値が見つかりました

分類Dev

スタックとバイナリ式ツリーでのダブルフリーまたは破損エラー

分類Dev

オブジェクトのベクトルを作成するときに、各オブジェクトのデフォルトではないオブジェクトコンストラクターを一意に呼び出します

分類Dev

クラスのメンバー関数を呼び出すときにクラスのオブジェクトが破損しました

分類Dev

gitファイルに破損したルーズオブジェクトが含まれている場合、プッシュされていないコミットをプッシュすることは可能ですか?

分類Dev

ラムダキャプチャリスト:オブジェクト全体をキャプチャしないと、オブジェクトのメンバーフィールドを値でキャプチャすることはできませんか?

Related 関連記事

  1. 1

    デストラクタが理解できない出力を返します( `./a.out 'のエラー:ダブルフリーまたは破損(fasttop):)

  2. 2

    ダブルフリーまたは破損(ファストトップ)エラーを把握できません

  3. 3

    参照を削除するときにダブルフリーまたは破損

  4. 4

    Flatbuffer Unionを使用すると、ダブルフリーまたは破損エラーが発生しました

  5. 5

    cでダブルフリーまたは破損(アウト)中止(コアダンプ)を克服する方法

  6. 6

    Cは、whileループ内の配列で検索番号を取得できず、「ダブルフリーまたは破損」エラーが発生します

  7. 7

    エラー:破棄されたオブジェクトにアクセスできません。このエラーの一般的な原因は、依存性注入から解決されたコンテキストを破棄することです

  8. 8

    ダブルフリーまたは破損エラー

  9. 9

    Glibcエラー:ダブルフリーまたは破損

  10. 10

    ファイルパスのRの光沢のあるリストからサブフォルダーを選択すると、タイプ 'closure'のオブジェクトのエラーはサブセット化できません

  11. 11

    フォームコントロールタイプをチェックするときのVBAランタイムエラー1004「アプリケーション定義またはオブジェクト定義エラー」

  12. 12

    ダブルフリーまたは破損(アウト)エラーがどこから発生しているのかをどのように知ることができますか?

  13. 13

    オブジェクトがstd :: memcpyによってコピーされるのを防ぐことはできますか?

  14. 14

    この関数内の「ダブルフリーまたは破損」エラー?

  15. 15

    ダブルフリーまたは破損エラーを修正しましたが、なぜ発生するのですか?

  16. 16

    pthreads「ダブルフリーまたは破損(アウト)」エラー

  17. 17

    マルチスレッドサーバーは、複数のクライアントが接続しようとすると、「破棄されたオブジェクトにアクセスできません」というエラーを表示します

  18. 18

    '破棄されたオブジェクトにアクセスできません。このエラーの一般的な原因は、依存性注入から解決されたコンテキストを破棄することです

  19. 19

    C ++オブジェクトを返すときのコピーと破棄

  20. 20

    char **を使用する場合のダブルフリーまたは破損

  21. 21

    オブジェクトをシリアル化しようとしたときの「と同じオブジェクトではありません」エラー

  22. 22

    あるスライドから別のスライドにOLEオブジェクトをコピーすると、PowerPointが破損する

  23. 23

    フリーズされたオブジェクトをコピーすると、TypeScriptでコンパイルの問題が発生します

  24. 24

    Filebeatが提供するもの:[エラー]のオブジェクトマッピングはフィールド[エラー]をオブジェクトとして解析しようとしましたが、具体的な値が見つかりました

  25. 25

    スタックとバイナリ式ツリーでのダブルフリーまたは破損エラー

  26. 26

    オブジェクトのベクトルを作成するときに、各オブジェクトのデフォルトではないオブジェクトコンストラクターを一意に呼び出します

  27. 27

    クラスのメンバー関数を呼び出すときにクラスのオブジェクトが破損しました

  28. 28

    gitファイルに破損したルーズオブジェクトが含まれている場合、プッシュされていないコミットをプッシュすることは可能ですか?

  29. 29

    ラムダキャプチャリスト:オブジェクト全体をキャプチャしないと、オブジェクトのメンバーフィールドを値でキャプチャすることはできませんか?

ホットタグ

アーカイブ