2012-03-31 71 views
1

我的項目需要動態分配內存。我究竟做錯了什麼?分配結構數組時遇到困難

/*Setting up my Struture*/ 
struct album_ { 
    int num_tracks; 
    struct tracks_ tracks; 
    int playlist_hits[]; 
}; 
typedef struct album_ album; 

/*Try to allocate memory for structure*/ 

fscanf(album_file,"%d", &number_of_album); 

    album *all_albums_p = (album *)malloc(sizeof(album)*number_of_album); 

    for(i=0;i < number_of_album; i++){ 
    all_albums_p[i].num_tracks = (int *)malloc(sizeof(int)); 
    all_albums_p[i].num_tracks = i+1; 
    printf("%d\n",all_albums_p[i].num_tracks); 
    } 

Error Message 
warning: assignment makes integer from pointer without a cast [enabled by default] 

此外,如果我想返回此數組是否正確return all_albums_p

回答

3

此行

all_albums_p[i].num_tracks = (int *)malloc(sizeof(int)); 

應該是

all_albums_p[i].playlist_hits = (int *)malloc(sizeof(int)); 

由於正在分配的album陣列,需要用一個指針來代替柔性陣列構件:playlist_hits應改爲int*

+0

如果我改變,我得到'functions.c:19:5:錯誤:無效使用靈活的陣列member' 的'functions.c:20:5:錯誤:使用無效靈活的數組成員' – 2012-03-31 12:46:25

+0

@LearningC請參閱我最後的編輯。除非所有靈活數組的大小相同(並且看起來不像它們在您的示例中具有相同大小),否則您將無法在數組中使用靈活數組的結構。 – dasblinkenlight 2012-03-31 12:55:31

+0

謝謝,我現在明白了。修復了這個問題。另一個問題是我試圖'返回all_albums_p;'但它也給了我這個錯誤'警告:返回使得指針沒有投射整數[默認啓用]' – 2012-03-31 13:06:36

0

起訴線

all_albums_p[i].num_tracks = (int *)malloc(sizeof(int)); 

你一個指針賦給一個int它。這會導致內存泄漏。 我不知道你與

此行打算什麼也怪

all_albums_p[i].num_tracks = i+1; 

您有n個專輯和你說的曲目數量將取決於專輯的指數。這是不太可能的。

第一張專輯有1首曲目。

第1000張專輯有1000首曲目。

聽起來不很理性

+0

我只是想測試一下。我會讀一個數字,它會告訴我專輯的數量。然後,我將不得不閱讀另一個數字,它會告訴我曲目的數量。 – 2012-03-31 13:10:42