我有一個包含一組char *屬性的結構。清空包含char的結構數組*
struct gcp_values {
char* srcX;
char* srcY;
char* dstX;
char* dstY;
};
好,我填補它在一個循環從集合Q對象
std::vector<GeoRefLibrary::gcp_values> gcpvalues(vl.size());
for(int i=0;i<vl.size();i++) {
gcppoint_ *a = qobject_cast<gcppoint_ *>(vl.at(i).value<QObject *>());
gcpvalues[i].srcX= strdup(QString::number(a->row()).toStdString().c_str());
gcpvalues[i].srcY= strdup(QString::number(a->column()).toStdString().c_str());
gcpvalues[i].dstX= strdup(QString::number(a->lon()).toStdString().c_str());
gcpvalues[i].dstY= strdup(QString::number(a->lat()).toStdString().c_str());
}
當我運行Valgrind的測試結果,這些OUTPT
12 bytes in 4 blocks are definitely lost in loss record 813 of 19,623
14 bytes in 4 blocks are definitely lost in loss record 889 of 19,623
16 bytes in 1 blocks are definitely lost in loss record 3,621 of 19,623
32 bytes in 4 blocks are definitely lost in loss record 8,851 of 19,623
36 bytes in 4 blocks are definitely lost in loss record 9,134 of 19,623
這些錯誤是在這些線路
的循環。我試圖delete [] gcpvalues
,但它返回錯誤的刪除/免費錯誤。我搜索,發現這個職位太
,但不能找到解決方案,可有一個人請幫我解決這個問題?
我也試過
struct gcp_values {
QString srcX;
QString srcY;
QString dstX;
QString dstY;
};
和返回同樣的錯誤
我改變了循環到這一點,似乎錯誤都沒有了
for(int i=0;i<vl.size();i++) {
gcppoint_ *a = qobject_cast<gcppoint_ *>(vl.at(i).value<QObject *>());
char* srcX = strdup(QString::number(a->row()).toStdString().c_str());
char* srcY = strdup(QString::number(a->column()).toStdString().c_str());
char* dstX = strdup(QString::number(a->lon()).toStdString().c_str());
char* dstY = strdup(QString::number(a->lat()).toStdString().c_str());
gcpvalues[i].srcX=srcX;
gcpvalues[i].srcY= srcY;
gcpvalues[i].dstX= dstX;
gcpvalues[i].dstY= dstY;
if(srcX) { free(srcX);}
if(srcY) { free(srcY);}
if(dstX) { free(dstX);}
if(dstY) { free(dstY);}
}
'strdup'文件特別指出:*必須將返回的指針傳遞給空閒以避免內存泄漏。* –
只需將'QString's放入'struct'中即可避免此問題。手動內存管理是困難和不必要的。不要這樣做。 – nwp
@nwp然後以後如何將Qstring轉換爲char *,因爲我在後面的函數中需要char *。 –