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, ×tamp, &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);
}
這確實是不夠的信息繼續下去。有人可能會猜測,但除非你願意等待這樣一個隨機靈感的閃光,否則你應該給我們一個簡短的,自包含的,正確的例子(http://sscce.org)。如果你不能,至少告訴我們它在哪裏崩潰,堆棧跟蹤,以及(假設它在MusicSequence函數中)參數是什麼。 – abarnert
除了沒有足夠的代碼,這顯然不是你的代碼的一部分,因爲'MusicEventUserData'的'length'成員不會拼錯爲'lenght'。 (作爲一個方面說明,你爲什麼要分配0,然後立即用'sizeof(UserEvent)'替換它?) – abarnert
在放棄之前我會做一個猜測。我注意到你正在做'(MusicTrack)軌道'。這意味着'軌道'是另一種類型。不幸的是,你不會向我們展示變量的定義或它如何設置。但是,如果你做了一些奇怪的事情,比如創建一個包含'OpaqueMusicTrack'的結構,並嘗試將一個指針傳遞給'MusicTrack',它可能最終變得分片,導致你讀垃圾(然後說,取消引用0而不是真正的指針),甚至(如果你真的不走運),直接從內存塊和段錯誤的最後一頁末尾讀取。 – abarnert