嘿,我在鼓機上工作,並且遇到矢量問題。Double添加到矢量中的免費內部析構函數
每個序列都有一個樣本列表,樣本在向量中排序。但是,如果樣本是向量上的push_back,則將調用樣本的析構函數,並導致雙重空閒錯誤。
下面是創建樣品的編號:
class XSample
{
public:
Uint8 Repeat;
Uint8 PlayCount;
Uint16 Beats;
Uint16 *Beat;
Uint16 BeatsPerMinute;
XSample(Uint16 NewBeats,Uint16 NewBPM,Uint8 NewRepeat);
~XSample();
void GenerateSample();
void PlaySample();
};
XSample::XSample(Uint16 NewBeats,Uint16 NewBPM,Uint8 NewRepeat)
{
Beats = NewBeats;
BeatsPerMinute = NewBPM;
Repeat = NewRepeat-1;
PlayCount = 0;
printf("XSample Construction\n");
Beat = new Uint16[Beats];
}
XSample::~XSample()
{
printf("XSample Destruction\n");
delete [] Beat;
}
和 '發電機' 代碼創建向量中的每個樣品:
class XDynamo
{
public:
std::vector<XSample> Samples;
void CreateSample(Uint16 NewBeats,Uint16 NewBPM,Uint8 NewRepeat);
};
void XDynamo::CreateSample(Uint16 NewBeats,Uint16 NewBPM,Uint8 NewRepeat)
{
Samples.push_back(XSample(NewBeats,NewBPM,NewRepeat));
}
這裏是主():
int main()
{
XDynamo Dynamo;
Dynamo.CreateSample(4,120,2);
Dynamo.CreateSample(8,240,1);
return 0;
}
這是程序運行時發生的情況:
Starting program: /home/shawn/dynamo2/dynamo
[Thread debugging using libthread_db enabled]
XSample Construction
XSample Destruction
XSample Construction
XSample Destruction
*** glibc detected *** /home/shawn/dynamo2/dynamo: double free or corruption (fasttop): 0x0804d008 ***
但是,當刪除[]從析構函數中刪除時,程序運行完美。
這是什麼造成的?任何幫助是極大的讚賞。
你爲什麼不只是使用' 'XSample'中的矢量'? – GManNickG 2010-05-11 20:14:29
同意,'Beat'應該是一個向量。 – Bill 2010-05-11 21:17:45