-1

1つの配列ノードだけ左にシフトしようとしている構造体の配列があります。配列の合計サイズは巨大(約3ギガバイト)なので、必要な配列の正確なサイズはわかっていても、スタックで宣言するには大きすぎます(16ギガのRAMがあり、64ビットを書き込んでいる場合でも)プログラム)、したがって、動的メモリ割り当てを強制することによって物事を複雑にします:

struct s_ptx
{
    short       streamIndex;
    double      raw;
    char        rawDx;

}  *Ptx[100];

void allocateMemory(void)
{
    ptxTotal = 300;

    for (int i = 0; i < 100; ++i)   
        Ptx[i] = (struct s_ptx*) calloc( ptxTotal, sizeof(struct s_ptx));
}

void shiftDataStructures(void)
{
    for (int j = 100 - 1; j > 0; --j) 
        Ptx[j] = Ptx[j - 1];
}

しかし、shiftDataStructures関数が機能していないため、間違った結果が得られます。これをどのように書き直す必要があるかについてのアイデア。

4

2 に答える 2

1

構造体をシフトするのではなく、ポインターのみをシフトします。ここで何を達成していると本当に思っているのでしょうか。

また、配列インデックスをシフトする必要があるのはなぜですか。たとえば、リンクリストやリングバッファを使用しないのはなぜですか。エラー自体がどうなるかについては、データが不十分なため、私にはわかりません。ポインタを上書きしないように、ループは正しい方向に実行されています。

于 2011-10-31T08:51:38.690 に答える