-1

EXEC_BAD_ACCESS(Code=1 , Address 0x0)このコードは の後に Appledelegate.m にありapplicationDidFinishLaunchingます。while ループで何気なくランダムに発生します (検索イベントが少ない場合、例外は発生しません)。言語について申し訳ありませんが、私を助けてくれてありがとう...ソース:

int trackindex = 14;
MusicSequenceGetIndTrack(sequence,trackindex, &track);

// Iterate throught the select track and add user event
Boolean hasNextEvent = false;
Boolean hasEvent = false;
NewMusicEventIterator(track,&iterator);
MusicEventIteratorHasCurrentEvent(iterator, &hasEvent);
MusicEventIteratorHasNextEvent(iterator, &hasNextEvent);

// loop throught track
while (hasNextEvent==true){
    MusicTimeStamp timestamp = 0;
    MusicEventType eventType = 0;
    const void *eventData = NULL;
    int note = 0;
    MusicTimeStamp duration = 0;
    MusicEventIteratorGetEventInfo(iterator, &timestamp, &eventType, &eventData, NULL);

    if(eventType == kMusicEventType_MIDINoteMessage) {
        MIDINoteMessage *noteMessage = (MIDINoteMessage *)eventData;
        note = noteMessage->note;
        duration = noteMessage->duration;
        UserEvent event;

        event.lenght = 0;
        event.lenght = sizeof(UserEvent);
        event.playedNote = note;
        event.tStamp = timestamp;

        MusicEventUserData *data = (MusicEventUserData *)&event;
        MusicTrackNewUserEvent((MusicTrack)track, timestamp, data);

        counter++;
        printf("counter : %u\n",counter);
    }

    MusicEventIteratorHasNextEvent(iterator, &hasNextEvent);
    MusicEventIteratorNextEvent(iterator);
}
4

1 に答える 1

0

最初に目を引くのは、「while(hasNextEvent == true)」は「while(hasNextEvent)」と同じではないということです。

2つ目は、ループの最後で、イテレータの「hasNextEvent」を取得し、状態をチェックする前にそれを進めるのは奇妙に思えます。間違っているかどうかはわかりませんが、見た目は間違っています。

于 2012-09-19T20:25:23.217 に答える