2012-09-19 79 views
-1

EXEC_BAD_ACCESS(Code=1 , Address 0x0)此代碼位於applicationDidFinishLaunching之後的Appledelegate.m中。 Occor在隨機循環中隨意和隨機(如果發現事件幾乎沒有例外occour)。對不起,語言和感謝的任何幫助我... 現在來源:EXEC_BAD_ACCESS(代碼= 1,地址= 0x0)

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); 
} 
+0

這確實是不夠的信息繼續下去。有人可能會猜測,但除非你願意等待這樣一個隨機靈感的閃光,否則你應該給我們一個簡短的,自包含的,正確的例子(http://sscce.org)。如果你不能,至少告訴我們它在哪裏崩潰,堆棧跟蹤,以及(假設它在MusicSequence函數中)參數是什麼。 – abarnert

+0

除了沒有足夠的代碼,這顯然不是你的代碼的一部分,因爲'MusicEventUserData'的'length'成員不會拼錯爲'lenght'。 (作爲一個方面說明,你爲什麼要分配0,然後立即用'sizeof(UserEvent)'替換它?) – abarnert

+0

在放棄之前我會做一個猜測。我注意到你正在做'(MusicTrack)軌道'。這意味着'軌道'是另一種類型。不幸的是,你不會向我們展示變量的定義或它如何設置。但是,如果你做了一些奇怪的事情,比如創建一個包含'OpaqueMusicTrack'的結構,並嘗試將一個指針傳遞給'MusicTrack',它可能最終變得分片,導致你讀垃圾(然後說,取消引用0而不是真正的指針),甚至(如果你真的不走運),直接從內存塊和段錯誤的最後一頁末尾讀取。 – abarnert

回答

0

映入我眼睛的第一件事是,「雖然(hasNextEvent ==真)」是不一樣的「,而( hasNextEvent)」。

第二個是,在你的循環結束時,你看起來奇怪的是你在迭代器的「hasNextEvent」,然後在檢查狀態之前提前它。不知道這是錯的,但它看起來不對。

+0

那麼,調用'NextEvent'然後調用'HasCurrentEvent'而不是調用'HasNextEvent'然後'NextEvent'就更清楚了,這也是MusicPlayer.h中的評論片段顯示的內容。但是你可以迭代一次,所以我不認爲這是問題所在。 – abarnert

相關問題