0

msvs2012 で大きなプログラムをデバッグしようとする_BLOCK_TYPE_IS_VALID(pHead->nBlockUse)と、デバッグ モードで実行すると常に終了します。リリース モードおよび g++ (-O0 フラグも使用) では、エラーは発生しません。このトピックに関するいくつかの記事 (クラスとデストラクタのエラー メッセージとポインタ) も読みましたが、コードの問題点が見つかりません。以下に最小限の(機能しない)例を示します。何が間違っているかを指摘し、それを解決する方法を示すことができますか? (標準コンテナーを使用することは、私にとっては解決策ではありません。)

#include <iostream>
using namespace std;    



class block_data {
public:
    int size;
    double * data;
    block_data() {};
    block_data(int s)
    {
        size = s;
        data = new double [size];
        for (int i=0; i<size; ++i)
            data[i] = i;
    }

    ~block_data() {delete[] data;};

    block_data operator+(const block_data& toadd)
    {
        block_data C(toadd.size);
        for (int i=0; i<size; ++i)
            C.data[i] = data[i] + toadd.data[i];

        return C;
    }

    block_data& operator=(const block_data& copy)
    {
        for (int i=0; i<size; ++i)
            data[i] += copy.data[i];
        return *this;
    }

};


int main()
{
    block_data sum(10);

    for (int seed = 0; seed < 10; ++seed)
    {       
        block_data d(10);
        sum = sum + d;
    }

    return 0;
}
4

2 に答える 2

0

@Dark Falconが提案したように、コピーコンストラクターを追加すると問題が解決するようです。

block_data(block_data& tocopy) : size(tocopy.size), data(new double[tocopy.size])
{
    for (int i=0; i<size; ++i)
        data[i] = tocopy.data[i];
}
于 2013-10-14T19:10:02.670 に答える