1. ホーム
  2. c++

[解決済み】C++エラー:ダブルフリーまたは破損(fasttop)

2022-02-12 08:46:51

質問

以下のプログラムを実行すると、"double free or corruption (fasttop)" というエラーが出るのですが、なぜでしょうか?文字配列の代わりに文字列を使用できることは知っています。しかし、私は動的メモリ割り当てで文字配列を使いたいのです。この問題を解決する方法を教えていただけませんか?

#include <iostream>
#include <cstring>
#include <vector>
using namespace std;

class Cube
{
public:
    char *str;

    Cube(int len)
    {
        str = new char[len+1];
    }

    Cube(const Cube &c)
    {
        str = new char[strlen(c.str) + 1];
        strcpy(str, c.str);
    }   
    ~Cube()
    {
        delete [] str;
    }
};

int main()
{
    vector <Cube> vec;

    for (int i = 0; i < 10; i++)
    {
        char in [] = "hello !!";
        Cube c(strlen(in)+1);
        strcpy(c.str, in);
        vec.push_back(c);
    } 

    int i = 0;
    for ( vector<Cube>::iterator it = vec.begin(); it < vec.end(); )
    {
        cout << it->str << endl;
        i++;
        if (i % 2 == 0)
            it = vec.erase(it);
        else
            it++;
    }


    for ( vector<Cube>::iterator it = vec.begin(); it < vec.end(); it++)
    {
        cout << it->str << endl;
    }
    return 0;    
}

解決方法は?

を定義するのを忘れています。 operator= を使用します。これはビッグスリーの法則(コピーCTOR、DTOR、代入がすべて定義されていなければならない)です。