2010-01-29 91 views
-1
#include <iostream> 
    using namespace std; 


    struct InvRec 
     { 
     int PartID; 
     float Price; 
     int Warehouse; 
     }; 

    typedef InvRec *InvRecptr; 
    typedef InvRec arr[]; 

    typedef InvRecptr * indexarr; 

    void deallocate (indexarr & ptrs, int & size) 

    { 
     for (int i=0; i<size; i++) delete (ptrs[i]); 
     delete ptrs; 
     ptrs = NULL; 
     size = 0; 
    }; 
int getRecordCount(); 






void main() 
{ 

    char YN; 

    cout << "press a key, at creation"; 
    cin >> YN; 
    InvRecptr *InvRecArray = new InvRecptr[10]; 

    for (int i = 0; i < 10; i++) 
    { 
     InvRecArray[i]->PartID = i; 

     cout << "\n i = " << i << "\n"; 
    } 
}; 

的porgram工作,如果在所述第一線對的環主「InvRecArray [I] - > PARTID = I; 」被註釋掉但否則崩潰C++指針幫助

+1

請刪除代碼中與該問題無關的部分('getRecordCount()'等) – 2010-01-29 17:00:41

回答

5

線:

InvRecptr *InvRecArray = new InvRecptr[10]; 

中分配指針數組。不過,這些指針並不是自己分配的。因此,你需要一個像這樣的循環分配指針:

for (int i = 0; i < 10; i++) 
{ 
    InvRecArray[i] = new InvRec; 
    // Initialize members of InvRecArray[i] 
} 
+1

p.s.,注意這將如何與deallocate()函數中的刪除模式相匹配。一個好的經驗法則是統計你的新電話和你的刪除電話;他們應該是一樣的。 – 2010-01-29 17:09:16

+0

+1好的建議: – 2010-01-29 17:19:45

4

還需要分配指針指向的內存。

1

當你做typedef InvRec *InvRecptr;InvRecptr *InvRecArray = new InvRecptr[10];,你在堆上分配一個指針數組。這些指針必須設置爲引用現有的InvRec

嘗試InvRec *InvRecArray = new InvRec[10];並使用InvRecArray[i].PartID來代替。這將分配一個連續的InvRec s陣列。

0

我相信這是因爲InvRecArray被聲明爲InvRecPtr *,這相當於一個指向數組的指針 - 你又試圖設置成員在數組中的值,但是你並沒有事先提出元素 - 因此你很可能試圖取消引用一個古怪的內存地址 - 或者至少有一個當然不指向一個有效的對象。

0

其他答案似乎已遺漏的一點: 聲明/初始化與用法不匹配。

您聲明並初始化一個對象數組。 然後嘗試將它用作指向對象的指針數組。

如果你把你的使用,你想聲明和初始化如下:

InvRecptr **InvRecArray = new InvRecptr*[10]; // Note the double-asterisk 
for (int i = 0; i < 10; i++) 
{ 
    InvRecArray[i] = new InvRecArray; // and the initialization 
    InvRecArray[i]->PartID = i; 
    ... 
} 

或者,你可以刪除一個間接層,在這種情況下,聲明/初始化保持原樣,並分配更改爲

InvRecArray[i].PartID = i; // Note the dot operator instead of arrow 

希望這會有所幫助。

+0

不完全,'InvRecptr'是'InvRec *'的一個typedef。原始代碼正確分配一個指針數組。 – 2010-01-29 18:15:55