2012-09-19 3 views
-1

EXEC_BAD_ACCESS(Code=1 , Address 0x0)이 코드는 applicationDidFinishLaunching 이후에 Appledelegate.m에 있습니다. while 루프는 자연스럽게 무작위로 검색됩니다 (찾기 이벤트가 예외적 인 경우는 거의 없습니다). 어떤을위한 언어 죄송하고 감사의은 ... 이제 소스 도와 :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'이 아니기 때문에, 코드가 충분하지 않은 것뿐만 아니라 코드의 _part_도 명확하지 않습니다. (그리고 부수적으로, 왜 0을 할당 한 다음 바로 'sizeof (UserEvent)'로 바꾸겠습니까?) – abarnert

+0

포기하기 전에 추측을 할 것입니다. 나는 당신이'(MusicTrack) track'을하고 있음을 알아 차렸다. 이것은'track'이 다른 타입의 것을 의미합니다. 유감스럽게도 변수 정의 또는 설정 방법을 표시하지 않습니다. 그러나'OpaqueMusicTrack'을 포함하는 구조체를 생성하고 'MusicTrack'으로 주위에 포인터를 전달하려고하는 것처럼 펑키 한 일을했다면, 결국 조각이되어 결국 쓰레기를 읽게 될 것입니다 (그리고 나서 , 실제 포인터 대신 0 참조), 심지어는 (실제로 운이 좋으면) 메모리 블록과 세그 폴트의 마지막 페이지 끝에서 바로 읽습니다. – abarnert

답변

0

내 눈을 잡는다 우선 "동안 (hasNextEvent == 사실이)", "동안 동일되지 않는 것입니다 (hasNextEvent) ".

둘째, 루프가 끝날 때 반복기의 "hasNextEvent"를 가져온 다음 상태를 확인하기 전에 미리 이동하는 것이 이상하게 보입니다. 그것이 틀렸다는 것을 확신하지는 않지만 틀린 것 같습니다.

+0

음, HasNextEvent와 NextEvent를 호출하는 대신'NextEvent'를 호출 한 다음 HasCurrentEvent를 호출하는 것이 확실합니다. 또한 MusicPlayer.h의 주석에있는 미리보기가 표시됩니다. 하지만 한 번 끝까지 반복 할 수 있으므로 문제라고 생각하지 않습니다. – abarnert

관련 문제