我有一个结构数组,我试图向左移动1个数组节点。数组的总大小是巨大的(大约3千兆字节),所以即使我知道我需要的数组的确切大小,它在堆栈上声明太大(即使我有16 gig的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函数不起作用。关于我如何重写这个的任何想法。
答案 0 :(得分:1)
你不是在移动结构,只是指针。我想知道你在想什么在这里实现了什么?
另外,为什么你需要移动数组索引,为什么不使用链表或环形缓冲区。至于错误本身是什么,我不知道因为你提供的数据不足;你的循环正在以正确的方向运行,以免覆盖指针。
答案 1 :(得分:0)
尝试在结构内部交换数据,而不是移动指针。结果将产生一个圆形阵列,其中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]);