2015-02-28 4 views
-1

Я пишу симулятор кэша, и по какой-то причине мои утверждения if продолжают давать мне segfaults. Для целей отладки я добавил несколько операторов печати. Все печатает точно так, как я ожидаю, вплоть до самого утверждения if, а затем он просто плюет обратно Segmentation Fault.Если оператор вызывает ошибку сегментации

int find_set(node** cache, unsigned set_i, long t, int E) { 
    printf("finding set\n"); 
    int i; // index 
    for (i = 0; i < E; i++) { 
    printf("trying seti = %d and i = %d \n", set_i, i); 
    printf("cache[set_i][i]->valid_bit = %d\n", cache[set_i][i]->valid_bit); 
    printf("cache[set_i][i]->tag = %d\n", cache[set_i][i]->tag); 
    if (cache[set_i][i]->valid_bit == 1) && ((cache[set_i][i]->tag) == t) { 
     printf("found tag! \n"); 
     cache[set_i][i]->LRU_count = 0; // just used 
     return i; // index of the set we found 
    } 
    } 
    return -1; // not found 
} 
+0

Это единственный код в вашей программе? –

+0

Не знаю, как я знаю, что оператор 'if' сам по себе будет генерировать ошибку сегментации. Это, вероятно, линия рядом с ней, которая это делает. Вам нужно показать больше своего кода, который показывает проблему. – lurker

+0

Нет, остальная часть программы работает нормально. Эта часть находится в цикле for. Есть ли причина, по которой утверждение if будет выглядеть так? – fourforrea

ответ

0

По крайней мере, скопируйте скобки и фигурные скобки. Я удалил один конец фигурной скобки и зафиксировал круглые скобки после if. Попробуйте заменить свою функцию следующим образом:

int find_set(node** cache, unsigned set_i, long t, int E){ 
    printf("finding set\n"); 
    int i; //index                
    int val; 
    for (i = 0; i < E; i++){ 
    printf("trying seti = %d and i = %d \n",set_i,i); 
    printf("cache[set_i][i]->valid_bit = %d\n",cache[set_i][i]->valid_bit); 
    printf("cache[set_i][i]->tag = %d\n",cache[set_i][i]->tag); 
    if ((cache[set_i][i]->valid_bit == 1) && (cache[set_i][i]->tag == t)){ 
     printf("found tag! \n"); 
     cache[set_i][i]->LRU_count = 0; //just used       
     return i; //index of the set we found         
    } 
    } 
    return -1; //not found              
} 
+0

Я все еще получаю ошибку сегментации. – fourforrea

+0

Прокомментируйте цикл for (строки 5-14 в моем коде). Он работает без ошибок? Если это произойдет, оно вернет -1. Если в программе нет, то что-то не так. – Jonathan

Смежные вопросы