清分,填充和操作與指針指針數組構建清分,填充和操縱指針數組與指針來構造
我的測試列表不知道的測試的次數在啓動。 測試次數和每個測試的內容將在稍後來自數據庫。 測試的順序應該很容易改變,測試應該可以單獨刪除/插入順序。
由於我可以確定查詢數據庫的測試數量,我想先分配一個指向所有測試的指針數組,然後爲每個測試分別分配內存。由此我可以通過交換指向測試的指針來重新排序序列,並且還能夠將新測試移除或插入到序列中。
我寫了一個小程序,可以用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
有什麼建議嗎?
謝謝。 Rainer
你沒有使用指針數組,雖然你似乎幾乎分配了一個。指針數組包含... *指針*。 – WhozCraig
psTestPtrArray應該有sTest **類型,賦值應該是psTestPtrArray [j] = psTestPtr。就像這樣,由於過於冗長的命名,你的代碼很難閱讀。 –
注意:使用'psTestPtrArray = calloc(i,sizeof(sTest *));'時,需要檢查'psTestPtrArray'是否指向'sTest'。使用'psTestPtrArray = calloc(i,sizeof * psTestPtrArray);',查看時不需要檢查。 – chux