Сдвиг на 1 массив структур C - PullRequest
0 голосов
/ 31 октября 2011

У меня есть массив структур, которые я пытаюсь сместить влево на 1 узел массива.Общий размер массива огромен (около 3 гигабайт), поэтому, хотя я знаю точный размер нужного мне массива, он слишком велик для объявления в стеке (даже если у меня 16 гигабайт оперативной памяти, и я пишу 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 не работает.Любые идеи о том, как мне нужно переписать это.

Ответы [ 2 ]

1 голос
/ 31 октября 2011

Вы не сдвигаете структуры, только указатели. Интересно, что вы на самом деле думаете, что достигаете здесь?

Кроме того, зачем вообще нужно сдвигать индексы массива, почему бы не использовать, скажем, связанный список или кольцевой буфер. Что касается самой ошибки, я понятия не имею, потому что вы предоставляете недостаточно данных; ваш цикл работает в правильном направлении, чтобы не перезаписывать указатели.

0 голосов
/ 31 октября 2011

Попробуйте поменять местами данные внутри структуры, а не смещать указатели.В результате будет получен круговой массив, в котором Ptx [99] будет отправлен в Ptx [0].

Пример кода:

 // Change codes in the following line
 for (int j = 100 - 1; j > 0; --j)
      //Ptx[j] = Ptx[j - 1];
        swap(Ptx[j], Ptx[j - 1]); 
...