以下函数populateArpeggioArray采用指向包含多个成员的typedef'd结构的指针,其身份不一定与我所拥有的问题相关。 populateArpeggioArray应该在将指向结构的指针传递给函数sortNoteStack之前对结构的内部元素执行一些操作。
我发现struct不会被sortNoteStack操作,因为populateArpeggioArray在某些时候会在将更改后的值传递给sortNoteStack之前更改指向struct的指针的值。
据我所知,代码似乎格式正确,并且对结构元素执行的所有操作都有适当的指针解除引用。从我所看到的,没有任何代码行应该能够修改指向struct的指针的值。使用const前缀声明struct无济于事,因为它的成员也被锁定为固定值。
我愿意接受这个问题,这可能是模拟器的问题,而不是代码,但如果我写的代码有一些潜在的问题,我当然想了解我是什么做错了。
感谢您的帮助。
-Nick
void populateArpeggioArray(arpeggio* arp) {
uint8_t i = 0,j=0, newNoteFlag=0;
for(i=0; i<12; i++) {
newNoteFlag = 0;
if(globals.keyboardCurrentState[i]) { /* Check to see if the current state shows that a keyboard button is pressed. */
arp->sequenceLength++; /* Temporarily increase the sequence length */
for(j=0;j < arp->sequenceLength;j++) { /* Check the pitch of each note currently in the note stack */
if(globals.keyboardNotes[i] == arp->notesUnordered[j].pitch) { /* If the currently selected note is already present in the note stack, */
arp->sequenceLength--;
newNoteFlag = 1; /* undo the temporary sequence length increase */
}
}
if(!newNoteFlag) {
arp->notesOrdered[arp->sequenceLength].pitch = globals.keyboardNotes[i]+liveArpeggio.transposeShift;
arp->notesUnordered[arp->sequenceLength].pitch = globals.keyboardNotes[i]+liveArpeggio.transposeShift; /* Add the new pitch to the appended note */
arp->notesOrdered[arp->sequenceLength].length = 111;
arp->notesUnordered[arp->sequenceLength].length = 111; /* Give the new note a default length. TEMP */
}
}
}
sortNoteStack(&arp);
}
答案 0 :(得分:3)
使用sortNoteStack(&arp)
,您传递的是指针的地址,而不是结构的地址。您想传递结构的地址(指针的值)。因此,请使用sortNoteStack(arp)
。