5
int load_byte(int memory[],int address) {
//This function works by finding the appropriate word then masking
//to obtain the relevant byte
int index,section;

    switch (address>>28) {
        case 0:
            index = address - START_ADDRESS;
            printf("index = %d",index);
        case 1:
            index = address - START_DATA_ADDRESS;
        case 7:
            index = address - START_STACK_ADDRESS;
   }

    section = index%4;
    index = index/4;
    switch (section) {
    case 0:
        return memory[index]&0x000000ff;
    case 1:
        return (memory[index]&0x0000ff00)>>8;
    case 2:
        return (memory[index]&0x00ff0000)>>16;
    case 3:
        return (memory[index]&0xff000000)>>24;
    }

}

START_ADDRESS has a value of 0x00400000 and the sample address I used was 0x00400002, it's just this function that keeps giving me a seg fault, don't quite understand why as the array in question has a size of 1000. Thanks in advance.

4

2 に答える 2

8

最初のスイッチは奇妙に見えます。0、1、7のみが処理されます。break;そして、それぞれの場合の終わりに声明はありません。

于 2012-10-26T09:16:00.787 に答える
1

コード:

switch (address>>28) {
    case 0:
        index = address - START_ADDRESS;
        printf("index = %d",index);
    case 1:
        index = address - START_DATA_ADDRESS;
    case 7:
        index = address - START_STACK_ADDRESS;
    }

はであるため、addressはから実行を開始し、 eachに何もないため、すべてのコードが実行されます。つまり、最終的には に等しくなります。0x00400002switchcase 0breakcase Xindexaddress - START_STACK_ADDRESS

多分これが理由でした。

breakの間に を追加してみてくださいcase

switch (address>>28) {
    case 0:
        index = address - START_ADDRESS;
        printf("index = %d",index);
        break;
    case 1:
        index = address - START_DATA_ADDRESS;
        break;
    case 7:
        index = address - START_STACK_ADDRESS;
}
于 2012-10-26T09:19:01.097 に答える