Illegal Instruction: 4
-
Hallo Leute
Warum bekomme ich beim folgenden Programm einen Illegal Instruction: 4 Fehler wenn ich am Anfang der Konsole 1 übergebe?
#include <stdio.h> #define WIDTH 4 #define LENGHT 12 // Prototypen void paritaetVergleichenUndFehlererkennen(int bit1[],int bit2[]); void eintragen (int [LENGHT],int [][WIDTH]); void paritaetBerechnen(int bit_liste[],int binaerListe[][WIDTH]); void paritaetBerechnenUndFehlerEinbauen(int bit_liste[],int binaerListe[][WIDTH],int stelle); void main() { int fehler; int stelle; printf("Soll ein Fehler beim Übertragen passieren? ja = 1 nein = 0 "); scanf("%i", &fehler); if (fehler == 0) { printf("An welcher Stelle? (1 - 8) "); scanf("%i", &stelle); switch (stelle) { case 1: stelle = 2; break; case 2: stelle = 4; break; case 3: stelle = 5; break; case 4: stelle = 6; break; case 5: stelle = 8; break; case 6: stelle = 9; break; case 7: stelle = 10; break; case 8: stelle = 11; break; } int bit1[LENGHT] = {-1,-1,1,-1,0,1,0,-1,1,0,0,1}; int bit2[LENGHT] = {-1,-1,1,-1,0,1,0,-1,1,0,0,1}; int binaerListe[4][WIDTH]; // Senden eintragen(bit1,binaerListe); paritaetBerechnen(bit1,binaerListe); // Empfangen eintragen(bit2,binaerListe); paritaetBerechnen(bit2,binaerListe); paritaetVergleichenUndFehlererkennen(bit1,bit2); } if (fehler == 1) { int bit3[LENGHT] = {-1,-1,1,-1,0,1,0,-1,1,0,0,1}; int bit4[LENGHT] = {-1,-1,1,-1,0,1,0,-1,1,0,0,1}; int binaerListe1[4][WIDTH]; if (bit4[stelle] == 0) { bit4[stelle] = 1; } else { bit4[stelle] = 0; } // Senden eintragen(bit3,binaerListe1); paritaetBerechnen(bit3,binaerListe1); // Empfangen eintragen(bit4,binaerListe1); paritaetBerechnen(bit4,binaerListe1); paritaetVergleichenUndFehlererkennen(bit3,bit4); } } /* Es werden die Paritätsbits der zwei übergebenen Codes verglichen und überprüft, ob ein Fehler entstanden ist oder nicht. Falls ein Fehler entstanden ist, wird ausgegeben, wo der Fehler passiert ist. */ void paritaetVergleichenUndFehlererkennen(int bit1[],int bit2[]) { int par1,par2,par3,par4; int erg = 0,i; par1 = bit1[0] ^ bit2[0]; par2 = bit1[1] ^ bit2[1]; par3 = bit1[3] ^ bit2[3]; par4 = bit1[7] ^ bit2[7]; if(par1||par2||par3||par4) { printf("Es ist ein FEHLER entstanden!"); printf("Der Fehler befindet sich an der Stelle %i %i %i %i\n",par4,par3,par2,par1); } else printf("Es ist KEIN Fehler entstanden! \n"); printf("Gesendet: %i %i %i %i %i %i %i %i %i %i %i %i \n",bit1[0], bit1[1], bit1[2], bit1[3], bit1[4], bit1[5], bit1[6], bit1[7], bit1[8], bit1[9], bit1[10], bit1[11]); printf("Empfangen: %i %i %i %i %i %i %i %i %i %i %i %i \n",bit2[0], bit2[1], bit2[2], bit2[3], bit2[4], bit2[5], bit2[6], bit2[7], bit2[8], bit2[9], bit2[10], bit2[11]); } /* Berechnet für den übergeben Code die 4 Paritätsbits und fügt sie im Code ein. */ void paritaetBerechnen(int bit_liste[],int binaerListe[][WIDTH]) { bit_liste[0] = binaerListe[0][0] ^ binaerListe[1][0] ^ binaerListe[2][0]; bit_liste[1] = binaerListe[0][1] ^ binaerListe[1][1] ^ binaerListe[2][1]; bit_liste[3] = binaerListe[0][2] ^ binaerListe[1][2] ^ binaerListe[2][2]; bit_liste[7] = binaerListe[0][3] ^ binaerListe[1][3] ^ binaerListe[2][3]; } void eintragen (int liste[LENGHT],int binaerListe[3][WIDTH]) { int bin_liste[LENGHT][WIDTH] = { {0,0,0,1}, {0,0,1,0}, {0,0,1,1}, {0,1,0,0}, {0,1,0,1}, {0,1,1,0}, {0,1,1,1}, {1,0,0,0}, {1,0,0,1}, {1,0,1,0}, {1,0,1,1}, {1,1,0,0} }; int i,j; int k = 0; liste[0] = -1; liste[1] = -1; liste[3] = -1; liste[7] = -1; for(i = 0; i < LENGHT; i++) { if(liste[i] == 1) { for(j = 0; j < WIDTH && k < 4; j++) { binaerListe[k][j] = bin_liste[i][j]; } k++; } } } void paritaetBerechnenUndFehlerEinbauen(int bit_liste[],int binaerListe[][WIDTH],int stelle) { bit_liste[0] = binaerListe[0][0] ^ binaerListe[1][0] ^ binaerListe[2][0]; bit_liste[1] = binaerListe[0][1] ^ binaerListe[1][1] ^ binaerListe[2][1]; bit_liste[3] = binaerListe[0][2] ^ binaerListe[1][2] ^ binaerListe[2][2]; bit_liste[7] = binaerListe[0][3] ^ binaerListe[1][3] ^ binaerListe[2][3]; //if (binaerListe[stelle] == 0) { // binaerListe[stelle] = 1: // } else { // binaerListe[stelle] = 0; //} }
Schonmal Danke
-
Schau dir Zeile 8 an und vergleiche mit Z. 124
Und Z. 124 und folgende soll das so
Es gibt da sicher noch mehr oder
-
Die Variable "stelle" wird in Zeilen 74 ff. uninitialisiert benutzt.
-
switch (stelle) { case 1: stelle = 2; break; case 2: stelle = 4; break; case 3: stelle = 5; break; case 4: stelle = 6; break; case 5: stelle = 8; break; case 6: stelle = 9; break; case 7: stelle = 10; break; case 8: stelle = 11; break; }
Let me refactor that for you
int lookup[] = {-1, 2, 4, 5, 6, 8, 9, 10, 11}; stelle = lookup[stelle];
-
lmrtfy schrieb:
Let me refactor that for you
int lookup[] = {-1, 2, 4, 5, 6, 8, 9, 10, 11}; stelle = lookup[stelle];
Das ist keine so gute Idee wenn 'stelle' vorher vom User eingegeben wurde.
-
genau.
erst gucken ob index gueltig