這個錯誤讓我瘋了......C:雙人免費或損壞,無法找到錯誤
Valgrinding程序表明delete[]
在DataPackage::~DataPackage
(40行)造成的問題。但是如果我刪除它,程序將會泄漏。 那麼,如何修復它,我做了什麼錯?
main.cxx
#include "main.h" // currently includes DataPackage.h only
DataPackage aTestFunction(){
return DataPackage("hello",5);
}
int main(){
DataPackage pack1 = aTestFunction(), pack2 = aTestFunction();
pack1 = pack2;
for(unsigned int i = 0; i < pack1.getLength(); i++){
printf("0x%02x ", *(pack1.getData()+i)&0xff);
}
return 0;
}
DataPackage.cxx
#include "DataPackage.h" // defines only the class, and private members m_data (char*) and m_length (size_t), includes <cstdio> and <cstring>
DataPackage::DataPackage(){
m_data = NULL;
m_length = 0;
}
DataPackage::DataPackage(string data){
m_data = NULL;
setData(data.c_str(),data.length()+1);
}
DataPackage::DataPackage(const char *data, size_t length) {
m_data = NULL;
setData(data,length);
}
DataPackage::DataPackage(const DataPackage &pack) {
m_data = NULL;
setData(pack.m_data,pack.m_length);
}
const char* DataPackage::getData(){
return m_data;
}
void DataPackage::setData(const char *newdata,size_t newlength){
char* tmpdata = new char[newlength];
m_length = newlength;
memcpy(tmpdata,newdata,m_length);
delete[] m_data;
m_data = tmpdata;
}
size_t DataPackage::getLength(){
return m_length;
}
DataPackage::~DataPackage() {
delete[] m_data;
}
謝謝,這解決了它(也許有人會有類似的問題)。但是,在這種情況下,這可能是[切換到矢量](http://stackoverflow.com/a/16572382/1354246)的好主意。 –