を与えると割り当てられたint型 `上で、私が持っている:`削除[]` * `` new`はC++大会の私の理解に続いてのmallocエラー
新しいブロックがAddBlock
に作成され
class BlockRepresentation : public FPRepresentation
{
private:
class Block
{
public:
int id;
int fpDimensions;
int* position; // pointers in question
int* blockDimensions; // pointers in question
~Block();
};
std::vector<Block> all_blocks;
public:
BlockRepresentation(int count, int dimensions, int volumn[]);
void AddBlock(int id, int position[], int dimensions[]);
std::string ToGPL();
};
:
void BlockRepresentation::AddBlock(int id, int position[],
int dimensions[])
{
Block newBlock;
newBlock.id = id;
newBlock.fpDimensions = fpDimensions;
newBlock.position = new int[fpDimensions]; // pointers in question
newBlock.blockDimensions = new int[fpDimensions]; // pointers in question
for (int i = 0; i < fpDimensions; ++i)
{
newBlock.position[i] = position[i];
newBlock.blockDimensions[i] = dimensions[i];
}
all_blocks.push_back(newBlock);
}
ので、私は、次のデストラクタがあります
BlockRepresentation::Block::~Block()
{
delete[] position;
delete[] blockDimensions;
}
をその後私は得る:
rep_tests(11039,0x7fff71390000) malloc: *** error for object 0x7fe4fad00240: pointer being freed was not allocated
ここでは2つのポインタをdelete[]
しないでください。コメントで指摘された
[3のルール](http://en.cppreference.com/w/cpp/language/rule_of_three)を満たすコピーコンストラクタがありません。私の推測では、コピーのデストラクタ 'delete []'によってポインタが割り当てられていないということです。 –
興味深いことに、私のテストがどのようにオブジェクトを使用しているかで、今実験して結果を得ることができます。 – Cescante
今後の参考として、これをより良い質問にするにはどうすればよいですか?私はdownvotesのアカウントでそれを削除することが最善の行動だとは思わない? – Cescante