2015-06-14 56 views
0
struct root 
{ 
    struct Qgroup 
    { 
     struct Qpost 
     { 
      struct Qcomment 
      { 
       struct Qcomment *next; 
       int likes; 
       int address; 
      } QComment[100]; 
      int likes; 
      int comments; 
      int address; 
     } QPost[100]; 
     int address; 
     int posts; 
     int users; 
    }QGroup[8]; 
}*Root = (struct root *)malloc(sizeof(struct root *)); 

在以下行中獲取訪問衝突錯誤。錯誤顯示C++中的訪問衝突

for(int i=0;i<5;i++) 
Root->QGroup[i].address = i*128+1024*1024; 

請幫我解決這個問題嗎? 我試過了靜態分配和動態分配,但都沒有讀取上面循環中給出的數據。 此錯誤是從執行開始後main()

回答

1
Root = malloc(sizeof(struct root *)); 

這有糾正如下:

Root = (struct root *)malloc(sizeof(struct root)); 

無需轉換爲struct root *因爲malloc返回一個空指針,您可以在C.但在C的情況下,將其分配給任何其他類型++你需要像你一樣施放。

如果是C++,最好使用newdelete代替mallocfree。 所以你可以簡單的使用如下:

Root = new root ; 
1

你的一點改進就是內存分配:

malloc(sizeof(struct root *)); 

您的指針,這是大多數現代系統只有4個或8個字節分配內存。

我真的不需要在這裏首先使用指針。