2012-03-31 4 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에 맞습니까? 만약 album 배열을 할당되므로

답변

3

이 줄

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

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

되어야하면 포인터와 가요 배열 부재를 교체해야 playlist_hits는 변경되어야 int*.

+0

매우 합리적인 소리가 나지 않는다 : 19 : 5 : 오류 : 유연한 배열 member' 의 잘못된 사용을'functions.c : 20 : 5 : 오류 : 잘못된 사용 플렉시블 어레이 멤버 ' –

+0

@LearningC 마지막 편집을 참조하십시오. 모든 유연한 배열의 크기가 같지 않으면 배열의 유연한 배열이있는 구조체를 사용할 수 없습니다 (예에서 크기가 같지 않은 것처럼 보입니다). – dasblinkenlight

+0

감사합니다. 지금 받으십시오. 그 문제가 해결되었습니다. 또 다른 문제는'return all_albums_p; '를하려고하지만'return : 정수가 아닌 포인터에서 정수를 만듭니다 [기본값으로 활성화]'입니다. –

0

불만 라인은

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

당신이 그것에 int로 포인터를 지정합니다. 메모리 누수가 발생합니다. 나는 당신이

이 줄 의도 무슨 생각이 없다

all_albums_p[i].num_tracks = i+1; 

는 n 개의 앨범이 있고 트랙의 수는 앨범의 인덱스에 의존 할 것이라고도 이상하다. 이것은 거의 없습니다.

첫 번째 앨범에는 1 트랙이 있습니다.

1000 번째 앨범에는 1000 개의 트랙이 있습니다.

나는`functions.c 얻을 변경하는 경우

+0

나는 그것을 시험해보기 위해 노력하고 있었다. 나는 숫자로 읽을 것이고 그것은 앨범의 수를 말해 줄 것이다. 그러면 트랙 번호를 알려주는 다른 번호를 읽어야합니다. –

관련 문제