Pytanie jest następujące, dlaczego tablica wartości zmiennej klucz[1][1][0] wywala mi -3,-3,-3,-3, mimo iż w funkcji wartości są wyliczane prawidłowo, alokuję dynamicznie pamięc w funkcji, oraz inne elementy np klucz[1][0][0] daje już dobre wyniki, wszystkie inne tablice klucz[1] mają prawidłowe wartości, a jedynie ta jedna, opisana powyżej ma jakieś dziwne wartości. Dzięki, poniżej kod
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char* xor(const char *klucz1,const char *klucz2){
int a;
char *wynik=(char*)malloc(sizeof(*wynik)*4);
for(a=0;a<4;a++){
wynik[a]=(klucz1[a]+klucz2[a]-2*'0')%2 +'0';
}
return wynik;
}
void tworzenie(char macierz[2][2][4],char *k0){
int a,b,c;
for(a=0;a<2;a++){
for(b=0;b<2;b++){
for(c=0;c<4;c++){
macierz[0][0][c]=k0[c];
macierz[0][1][c]=k0[c+4];
macierz[1][0][c]=k0[c+8];
macierz[1][1][c]=k0[c+12];
}
}
}
}
int main(void){
char klucz[3][2][2][4];
char *k0="1001111001110110";
tworzenie(klucz[0],k0);
strcpy(klucz[1][0][0],xor(xor(sbox(0,klucz[0][1][1]),"0001"),klucz[0][0][0]));
strcpy(klucz[1][1][0],xor(klucz[0][1][0],klucz[1][0][0]));
strcpy(klucz[1][0][1],xor(klucz[0][0][1],klucz[1][1][0]));
strcpy(klucz[1][1][1],xor(klucz[0][1][1],klucz[1][0][1]));
return 0;
}