Enviado em 14/09/2019 - 12:31h
Bom dia, preciso fazer a troca das posições da minha matriz, porém está apresentando falha de segmentação na hora de trocar.
[#include <stdio.h>
#include <stdlib.h>
char **ler(){
char **m;
int i;
m= malloc(5 * sizeof(char*));
for (int i = 0; i < 5; i++){
m[i] = malloc(5 * sizeof(char *));
}
for(i=0; i<5; i++){
scanf("%[^\n]%*c", m[i]);
}
}
char **printar(char **m){
int i;
for(i=0; i<5; ++i){
for(int j=0; j<5; ++j){
printf(" %c", m[i][j]);
}
printf("\n");
}
}
void *achar(char **m, int *a, int *b){ //achei espaço
for(int i=0; i<5; i++){
for(int j=0; j<5; j++){
if(m[i][j]==' '){
*a=i;
*b=j;
}
}
}
}
void trocar(int comando, char **m, int a, int b){
char change;
if(comando == 'A'){ //cima
change= m[a-1][b];
m[a-1][b]=m[a][b];
m[a][b]=change;
} else if(comando == 'R'){ //direita
change = m[a][b+1];
m[a][b+1]= m[a][b];
m[a][b]=change;
} else if(comando == 'B'){ //baixo
change=m[a+1][b];
m[a+1][b]=m[a][b];
m[a][b]=change;
} else if(comando == 'L'){ //esquerda
change= m[a][b-1];
m[a][b-1]=m[a][b];
m[a][b]=change;
}
}
void **comandos(char **m){
char op;
int *a, *b;
do{
scanf("%c", &op);
achar(m,a,b);
if(op =='A'){
trocar(op, m, *a,*b);
} else if(op == 'B'){
trocar(op, m, *a,*b);
} else if(op == 'R'){
trocar(op, m, *a,*b);
} else if (op == 'L'){
trocar(op, m, *a, *b);
}
}
while(op != 'O');
}
int main (){
char **m=ler();
comandos(m);
printar(m);
for(int i =0; i<5; i++){
free(m[i]);
}
free(m);
return 0;
}[
[#include <stdio.h>
#include <stdlib.h>
char **ler(){
char **m;
int i;
m= malloc(5 * sizeof(char*));
for (int i = 0; i < 5; i++){
m[i] = malloc(5 * sizeof(char *));
}
for(i=0; i<5; i++){
scanf("%[^\n]%*c", m[i]);
}
}
char **printar(char **m){
int i;
for(i=0; i<5; ++i){
for(int j=0; j<5; ++j){
printf(" %c", m[i][j]);
}
printf("\n");
}
}
void *achar(char **m, int *a, int *b){ //achei espaço
for(int i=0; i<5; i++){
for(int j=0; j<5; j++){
if(m[i][j]==' '){
*a=i;
*b=j;
}
}
}
}
void trocar(int comando, char **m, int a, int b){
char change;
if(comando == 'A'){ //cima
change= m[a-1][b];
m[a-1][b]=m[a][b];
m[a][b]=change;
} else if(comando == 'R'){ //direita
change = m[a][b+1];
m[a][b+1]= m[a][b];
m[a][b]=change;
} else if(comando == 'B'){ //baixo
change=m[a+1][b];
m[a+1][b]=m[a][b];
m[a][b]=change;
} else if(comando == 'L'){ //esquerda
change= m[a][b-1];
m[a][b-1]=m[a][b];
m[a][b]=change;
}
}
void **comandos(char **m){
char op;
int *a, *b;
do{
scanf("%c", &op);
achar(m,a,b);
if(op =='A'){
trocar(op, m, *a,*b);
} else if(op == 'B'){
trocar(op, m, *a,*b);
} else if(op == 'R'){
trocar(op, m, *a,*b);
} else if (op == 'L'){
trocar(op, m, *a, *b);
}
}
while(op != 'O');
}
int main (){
char **m=ler();
comandos(m);
printar(m);
for(int i =0; i<5; i++){
free(m[i]);
}
free(m);
return 0;
}[