My code manage to build without errors, but it crashes when I try to run it. Anybody can give me some help?
Code:#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include <malloc.h>
void rubikdesign(int **rubikm);
void switchrowncolumn(int **rubikm, int r);
void rotateupperleft(int **rubikm);
void rotatelowerleft(int **rubikm);
void rotatemidclock(int **rubikm);
void rotatemidanticlock(int **rubikm);
void complete(int **rubikcc);
int main(void)
{
int i,j, **rubik, **rubikc, n;
char choice, mode;
rubikdesign(rubik);
complete(rubikc);
for(i=0; i<2; i++)
{
for(j=0; j<4; j++)
{
printf("%d", rubik[i][j]);
}
printf("\n");
}
printf("Select the mode of solution:\n\n");
printf("1. Manual Mode\n");
printf("2. Automated Mode\n\n");
printf("Enter your selection: ");
scanf("%c", &mode);
if(mode == '1')
{
do
{
for(i=0; i<2; i++)
{
for(j=0; j<4; j++)
{
printf("%d", rubik[i][j]);
}
printf("\n");
}
printf("Manual Mode\n");
printf("Transform Operations\n");
printf("n0 = Switch rows for the nth column from the left, where n = 1,2,3,4\n");
printf(" 7 = Rotate Upper row left one step\n");
printf(" 1 = Rotate Lower row left one step\n");
printf(" 2 = Rotate the mid four 'squares/numbers' Clockwise one step\n");
printf(" 8 = Rotate the mid four 'squares/numbers' Anti-Clockwise one step\n");
printf("Enter Transform Operation (one at a time): ");
scanf("%c", &choice);
switch (choice)
{
case 'n':
printf("Enter column that will switch rows(n=1,2,3,4): ");
scanf("%d", &n);
switchrowncolumn(rubik, n);
break;
case '7':
rotateupperleft(rubik);
break;
case '1':
rotatelowerleft(rubik);
break;
case '2':
rotatemidclock(rubik);
break;
case '8':
rotatemidanticlock(rubik);
break;
default:
printf("Invalid choice\n");
break;
}
} while(**rubik != (**rubikc));
}
else if(mode == '2')
{
return 0;
}
/*Free memory for each row*/
for(i=0;i<2;i++)
{
free(rubik[i]);
}
free(rubik);
return 0;
}
void rubikdesign(int **rubikm)
{
int i;
/*Memory allocation for row*/
rubikm = (int**)malloc(2*sizeof(int*));
/*Memory allocation for coloumn*/
for(i=0; i < 4; i++)
{
rubikm[i] = (int*)malloc(4*sizeof(int));
}
rubikm[0][0] = 4;
rubikm[0][1] = 7;
rubikm[0][2] = 1;
rubikm[0][3] = 6;
rubikm[1][0] = 2;
rubikm[1][1] = 3;
rubikm[1][2] = 8;
rubikm[1][3] = 5;
}
void switchrowncolumn(int **rubikm, int r)
{
int temp;
temp = rubikm[0][r];
rubikm[0][r] = rubikm[1][r];
rubikm[1][r] = temp;
}
void rotateupperleft(int **rubikm)
{
int temp;
temp = rubikm[0][0];
rubikm[0][0] = rubikm[0][1];
rubikm[0][1] = rubikm[0][2];
rubikm[0][2] = rubikm[0][3];
rubikm[0][3] = temp;
}
void rotatelowerleft(int **rubikm)
{
int temp;
temp = rubikm[1][0];
rubikm[1][0] = rubikm[1][1];
rubikm[1][1] = rubikm[1][2];
rubikm[1][2] = rubikm[1][3];
rubikm[1][3] = temp;
}
void rotatemidclock(int **rubikm)
{
int temp;
temp = rubikm[0][1];
rubikm[0][1] = rubikm[1][1];
rubikm[1][1] = rubikm[1][2];
rubikm[1][2] = rubikm[0][2];
rubikm[0][2] = temp;
}
void rotatemidanticlock(int **rubikm)
{
int temp;
temp = rubikm[0][1];
rubikm[0][1] = rubikm[0][2];
rubikm[0][2] = rubikm[1][2];
rubikm[1][2] = rubikm[1][1];
rubikm[1][1] = temp;
}
void complete(int **rubikcc)
{
rubikcc[0][0] = 1;
rubikcc[0][1] = 2;
rubikcc[0][2] = 3;
rubikcc[0][3] = 4;
rubikcc[1][0] = 5;
rubikcc[1][1] = 6;
rubikcc[1][2] = 7;
rubikcc[1][3] = 8;
}