0

ファイル操作用の dll を作成しているときに、問題が発生しています。

file.read を介してファイルからバイトを読み取るには、必要な長さの char* 配列が必要です。長さが可変なので使えない

char* ret_chars[next_bytes];

next_bytes が定数ではないというエラーが発生します。

ここ StackOverflow の別のトピックでは、次を使用するように指示されています。

char* ret_chars = new char[next_bytes];

私の知る限り、「新規」で作成するには、後で「削除」を使用する必要があります。

では、この関数の戻り値がまさにこの配列であると想定されている場合、どのように配列を削除すればよいのでしょうか? 「削除」をどこにも使わないとメモリリークではないですか?

それが何か役立つ場合: これは、「ゲーム メーカー」から呼び出す DLL です。したがって、後で何かを削除する可能性はありません。

誰かが私を助けてくれることを願っています!

4

7 に答える 7

0

char ポインターを返している場合は、そのポインターのように見えますが、そのポインターに対して単に delete を呼び出すことができます。

例:

char * getString()
{
    char* ret_chars = new char[next_bytes];
    strcpy(ret_chars, "Hello world")
    return ret_chars
}

void displayChars()
{
    char* chars = getString()
    cout << chars
    delete [] chars
}

割り当てられた(新しく作成された)すべてのポインターの割り当てを解除(削除)してください。そうしないと、メモリが割り当てられ、実行後に収集されずに使用できなくなるメモリリークが発生します。新しいものをカウントし、削除をカウントするために割り当てられたすべてのスペースの割り当てを解除したかどうかを一目で確認するための簡単で汚い方法であり、条件ブロックまたはループブロックに一部が表示されない限り、それらは 1 対 1 である必要があります。

于 2013-07-16T16:22:00.510 に答える