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

あいまいさ

私はこのエラーの意味を見回してきましたが、同じオブジェクトを複数回解放していることを意味しているようです。これを防ぐ方法がわからないようです。どんな助けや提案も大歓迎です。

File(randname)
File(a.out)
~File(a.out)
~Directory(randname)
~File(null)
~File()
*** glibc detected *** a.out: double free or corruption (fasttop): 0x0804b048 ***
======= Backtrace: =========
/lib/libc.so.6(+0x6ff0b)[0xb74baf0b]
/usr/local/gcc/gcc-cilk/lib/libstdc++.so.6(_ZdlPv+0x1f)[0xb7671b4f]
/usr/local/gcc/gcc-cilk/lib/libstdc++.so.6(_ZdaPv+0x1b)[0xb7671b9b]
a.out[0x8048983]
a.out[0x8048b12]
a.out[0x80487d7]
/lib/libc.so.6(__libc_start_main+0xf3)[0xb7464003]
a.out[0x8048701]
======= Memory map: ========
08048000-08049000 r-xp 00000000 00:25 268562602  /home/user/test/a.out
08049000-0804a000 r--p 00000000 00:25 268562602  /home/user/test/a.out
0804a000-0804b000 rw-p 00001000 00:25 268562602  /home/user/test/a.out
0804b000-0806c000 rw-p 00000000 00:00 0          [heap]
b7448000-b744b000 rw-p 00000000 00:00 0
b744b000-b75b2000 r-xp 00000000 08:01 1365267    /lib/libc-2.14.1.so
b75b2000-b75b4000 r--p 00167000 08:01 1365267    /lib/libc-2.14.1.so
b75b4000-b75b5000 rw-p 00169000 08:01 1365267    /lib/libc-2.14.1.so
b75b5000-b75b8000 rw-p 00000000 00:00 0
b75b8000-b75d3000 r-xp 00000000 08:01 1179017    /usr/local/gcc/gcc-cilk/lib/libgcc_s.so.1
b75d3000-b75d4000 r--p 0001a000 08:01 1179017    /usr/local/gcc/gcc-cilk/lib/libgcc_s.so.1
b75d4000-b75d5000 rw-p 0001b000 08:01 1179017    /usr/local/gcc/gcc-cilk/lib/libgcc_s.so.1
b75d5000-b75fe000 r-xp 00000000 08:01 1365275    /lib/libm-2.14.1.so
b75fe000-b75ff000 r--p 00028000 08:01 1365275    /lib/libm-2.14.1.so
b75ff000-b7600000 rw-p 00029000 08:01 1365275    /lib/libm-2.14.1.so
b7622000-b7624000 rw-p 00000000 00:00 0
b7624000-b770b000 r-xp 00000000 08:01 1179021    /usr/local/gcc/gcc-cilk/lib/libstdc++.so.6.0.19
b770b000-b770f000 r--p 000e7000 08:01 1179021    /usr/local/gcc/gcc-cilk/lib/libstdc++.so.6.0.19
b770f000-b7710000 rw-p 000eb000 08:01 1179021    /usr/local/gcc/gcc-cilk/lib/libstdc++.so.6.0.19
b7710000-b7718000 rw-p 00000000 00:00 0
b7718000-b7737000 r-xp 00000000 08:01 1365260    /lib/ld-2.14.1.so
b7737000-b7738000 r--p 0001f000 08:01 1365260    /lib/ld-2.14.1.so
b7738000-b7739000 rw-p 00020000 08:01 1365260    /lib/ld-2.14.1.so
bfa18000-bfa39000 rw-p 00000000 00:00 0          [stack]
ffffe000-fffff000 r-xp 00000000 00:00 0          [vdso]
Aborted

そしてここにコードがあります:

#include <unistd.h>
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;

class File
{
protected:
    unsigned char recordLen;
    unsigned location;
    unsigned fileSize;
    unsigned char filenameLen;
    char* filename;

public:
    File(){filename = NULL;}
    File(FILE* readFromHere, const char* name)
    {
        recordLen = 152;
        location = 20003;
        fileSize = 16348;
        filenameLen = strlen(name);
        filename = new char[filenameLen + 1];
        strcpy(filename, name);
        cout << "File(" << filename << ")\n";
    }
    File(const File& o)
    {
        if (o.filename == NULL)
            filename = o.filename;
        else
        {
            filename = new char[o.filenameLen + 1];
            strcpy(filename, o.filename);
        }
    }
    ~File()
    {
        if (filename)
            cout << "~File(" << filename << ")\n";
        else
            cout << "~File(null)\n";
        if (filename != NULL)
            delete[] filename;
    }
};

class Directory : public File
{
protected:
    int numContents;
    File* contents;
public:
    Directory(FILE* readFromHere, const char* name)
        : File(readFromHere, name)
    {
        numContents = 2;
        contents = new File[numContents];
        contents[0] = File(readFromHere, "a.out");
        //~ contents[1] = File(readFromHere, "otherfile.cpp");
    }
    ~Directory()
    {
        if (filename)
            cout << "~Directory(" << filename << ")\n";
        else
            cout << "~Directory(null)\n";
        if (contents != NULL)
            delete[] contents;
    }
};

int main()
{
    Directory d(NULL, "randname");
    sleep(2);
    return 0;
}
アンゲヴァンテはもはやSOを誇りに思っていません

あなたのクラスは、リソースを所有していても、3つルールに準拠していませんコピーコンストラクタとデストラクタがありますが、コピー割り当て演算子はありません。つまり、この行は次のとおりです。

contents[0] = File(readFromHere, "a.out");

デフォルトのコピー割り当て演算子を呼び出します。これは、ポインタを適切にコピーします。二重削除の問題があります。

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

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

編集
0

コメントを追加

0

関連記事

分類Dev

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

分類Dev

free()の実行中に「glibcがダブルフリーまたは破損を検出しました」というエラーが発生しました

分類Dev

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

分類Dev

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

分類Dev

glibcが検出されました-ダブルフリーまたは破損(!prev)

分類Dev

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

分類Dev

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

分類Dev

エラー:ダブルフリーまたは破損(ファストトップ)

分類Dev

ダブルフリーまたは破損(ファストトップ)エラーc / c ++ linux

分類Dev

OpenMP *** '...'のエラー:ダブルフリーまたは破損(fasttop):[アドレス] ***

分類Dev

Javaダブルフリーまたは破損

分類Dev

C-ダブルフリーまたは破損

分類Dev

ダブルフリーまたは破損:C ++

分類Dev

Qtダブルフリーまたは破損

分類Dev

cythonダブルフリーまたは破損

分類Dev

ダブルフリーまたは破損(アウト)-C ++

分類Dev

ダブルフリーまたは破損C ++

分類Dev

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

分類Dev

データ構造のダブルフリーまたは破損

分類Dev

ダブルフリーまたは破損(ファストトップ)

分類Dev

C ++ダブルフリーまたは破損エラー1回だけフリーしていると思われる場合

分類Dev

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

分類Dev

エラーphp職人パスポート:ダブルフリーまたは破損(アウト)をインストール

分類Dev

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

分類Dev

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

分類Dev

ダブルフリーまたは共有ポインタによる破損

分類Dev

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

分類Dev

Cのダブルフリーまたは破損3D配列

分類Dev

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

Related 関連記事

  1. 1

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

  2. 2

    free()の実行中に「glibcがダブルフリーまたは破損を検出しました」というエラーが発生しました

  3. 3

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

  4. 4

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

  5. 5

    glibcが検出されました-ダブルフリーまたは破損(!prev)

  6. 6

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

  7. 7

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

  8. 8

    エラー:ダブルフリーまたは破損(ファストトップ)

  9. 9

    ダブルフリーまたは破損(ファストトップ)エラーc / c ++ linux

  10. 10

    OpenMP *** '...'のエラー:ダブルフリーまたは破損(fasttop):[アドレス] ***

  11. 11

    Javaダブルフリーまたは破損

  12. 12

    C-ダブルフリーまたは破損

  13. 13

    ダブルフリーまたは破損:C ++

  14. 14

    Qtダブルフリーまたは破損

  15. 15

    cythonダブルフリーまたは破損

  16. 16

    ダブルフリーまたは破損(アウト)-C ++

  17. 17

    ダブルフリーまたは破損C ++

  18. 18

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

  19. 19

    データ構造のダブルフリーまたは破損

  20. 20

    ダブルフリーまたは破損(ファストトップ)

  21. 21

    C ++ダブルフリーまたは破損エラー1回だけフリーしていると思われる場合

  22. 22

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

  23. 23

    エラーphp職人パスポート:ダブルフリーまたは破損(アウト)をインストール

  24. 24

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

  25. 25

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

  26. 26

    ダブルフリーまたは共有ポインタによる破損

  27. 27

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

  28. 28

    Cのダブルフリーまたは破損3D配列

  29. 29

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

ホットタグ

アーカイブ