2012-09-19 51 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

相关问题