使用指向结构的指针分配,填充和操作指针数组
我有一个测试列表,但不知道开始时的测试次数。 测试次数和每个测试的内容将来自数据库。 测试顺序应易于更改,测试应单独删除/插入序列中。
由于我可以确定查询数据库的测试次数,我想首先分配一个指向所有测试的指针数组,然后分别为每个测试分配内存。 通过这个我可以通过交换指向测试的指针来重新排序序列,并且还能够将新测试移除或插入到序列中。
我写了一个小程序,可以用gdt快速检查。
遗憾的是,编译器不接受将测试(已分配的mem)分配给指针数组(也分配了mem)。
#define MAX_TEST_NAME 100
typedef struct sTestT
{
char cTested; // Output of this Test
char cEnabled; //
char cName[MAX_TEST_NAME+1];
} sTest;
void main(int argc, char **argv)
{
printf ("Double Pointer Test for GDB\n");
int i,j;
i = 7; // A random number for this program, to be able to change it with gdb
sTest* psTestPtr;
sTest* psTestPtrArray;
sTest* psTestPtrArrayOriginal;
// We first allocate an array of pointers to the Tests, NOT an array of the Tests
psTestPtrArray = calloc (i, sizeof(sTest*)); // allocate the pointer array
psTestPtrArrayOriginal = psTestPtrArray; // store original pointer to free memory later
// Now we allocate each test seperatly and let the psTestPtrArray point to the test
for (j=0; j<i; j++)
{
// Now we allocate ONE trigger each time to be able to free them seperately
psTestPtr = calloc (1, sizeof(sTest));
psTestPtr->cTested = j;
*psTestPtrArray = &psTestPtr; // <-------------- Does NOT compile
psTestPtrArray++; // Next pointer to another Test
}
// Working with test omitted
// Free Tests and pointer array
psTestPtrArray = psTestPtrArrayOriginal; // Restore initial pointer to be able to walk through array
for (j=0; j<i; j++)
{
free (*psTestPtrArray); // <-------------- Does NOT compile
psTestPtrArray++;
}
free (psTestPtrArray);
} // main
有什么建议吗?
感谢。 赖
答案 0 :(得分:0)
您正在声明错误类型的变量。当您分配它们时,您应该有自解释错误。
sTest* psTestPtr; //pointer to a sTest
sTest** psTestPtrArray; //Pointer to an array of pointers to sTest
sTest** psTestPtrArrayOriginal; //same as above
并且
*psTestPtrArray = &psTestPtr;
应该是
*psTestPtrArray = psTestPtr;
因为psTestPtr
已经是指向sTest
的指针。不需要取其地址。
如果使用数组索引为每个sTest
分配内存而不是递增指针变量,那么它会更容易。