2
typedef struct {
    char *u8_testStep;
    char *u8_functionTested;
    char *u8_testDescription;
    char *u8_expectedResponse;
    char *u8_packetTx;
    char *u8_packetRx;
    char *u8_passFail;
    char *u8_comment;
}T_testStepDetails;

タイプ用に作成されたリストT_testStepDetails:--

QList<T_testStepDetails>* testCaseStepslist = new QList<T_testStepDetails>();
QString strTemp;
T_testStepDetails *testStepMessageBuffer = new T_testStepDetails;

T_testStepDetails:----の個々の要素にメモリを割り当てる

testStepMessageBuffer->u8_testStep = new char[strTemp.length()];
// copy value to the pointer
qstrcpy(testStepMessageBuffer->u8_testStep, strTemp.toStdString().c_str());

リストに追加:---

testCaseStepslist->append(*testStepMessageBuffer);

空きメモリ:----

if(!list.isEmpty())
{
    qDeleteAll(list);
    list.clear();
}

したがって、上記の手順でメモリを解放するだけで、メモリ リークを防ぐことができます。?

T_testStepDetailsまたは、リスト内のタイプの構造ごとに、char*動的にメモリを割り当てた内部メンバーのメモリを解放する必要があります?

4

3 に答える 3

2

まずQtを使っているので、に置き換えるchar *のが妥当と思われQStringます。char *これにより、配列のメモリ取引を取り除くことができます。次に、メモリを動的に割り当てるすべてのケースを検討してください。スタック割り当てオブジェクトだけを使用できる場合があります。例えば、

QList<T_testStepDetails>* testCaseStepslist = new QList<T_testStepDetails>();

一見冗長に見えます。リストはいつでも参照渡しできます。割り当てられたオブジェクトをリストにスタックすることもできますがappend、動的に作成してからコピーする必要はありません。

于 2013-06-27T12:22:16.360 に答える
1

で作成しdelete[]たそれぞれを呼び出す必要があります。char*new[]

QByteArrayまたは のQString代わりに またはを使用することを検討してくださいchar*

于 2013-06-27T11:45:44.727 に答える