0

構文が正しいかどうかわかりません。私のコードは機能しています。改善のためにコメントしたい人を超えて実行したいだけです。20480 を割り当ててもスペースは消費されないと思いますが、それは単なるポインターの配列なのでしょうか? では、dwStringsFound よりも大きい任意の数値に変更できますか?

    struct sArray   {
    TCHAR *sName;
    }*sKeys[20480];

    // get dwStringsFound...
    [...]

    // allocate the space
    for (DWORD i=0;i<dwStringsFound;i++) sKeys[i] = (sArray *) calloc(1,sizeof(sArray));
    for (DWORD i=0;i<dwStringsFound;i++) sKeys[i]->sName = tcalloc(1024);

    // Do work...
    [...]

    // Free resources.
    for (DWORD i=0;i<dwStringsFound;i++)    {
    free(sKeys[i]->sName);sKeys[i]->sName=NULL;
    free(sKeys[i]);sKeys[i]=NULL;
    }
4

2 に答える 2

1

TCHAR * はポインタなので、なぜ TCHAR * sName[20480] を実行できないのでしょうか?

于 2013-03-27T16:06:27.403 に答える
0

静的割り当ては問題ありませんが、最もメモリ効率が良くありません。将来的には、**sKeys を sArray の配列に割り当て、dwStringsFound をこの配列のサイズにすることを検討する必要があるかもしれません。現在の方法で問題が発生するのは、プログラムのある時点で深く再帰的な関数を呼び出すと、スタック メモリが不足する可能性があることです。スタック メモリよりも常に多くのヒープ メモリがあることを覚えておいてください。プログラム全体で何かを使用する予定がない場合は、おそらく malloc して解放する必要があります。静的に割り当てられているだけの場合、その有用性がなくなった後、スペースを浪費しているだけです。

于 2013-03-27T16:06:47.633 に答える