char *プロパティのセットを含む構造体があります。空を含む構造体の配列char *
struct gcp_values {
char* srcX;
char* srcY;
char* dstX;
char* dstY;
};
よく私はこれらのエラーがでこれらのラインであるIは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
結果QTオブジェクトのセット
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());
}
からループでそれを埋めますループ。私は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'ドキュメントには次のような特記があります:*メモリリークを避けるため、返されたポインタをfreeに渡す必要があります。* –
この問題は' struct'に 'QString'を入れるだけで簡単に回避できます。手動でのメモリ管理は困難であり、不要です。それをしないでください。 – nwp
@nwpそれでは、後の関数でchar *が必要なので、Qstringをchar *に変換するにはどうすればいいですか? –