Olá, estou fazendo seguinte programa com o objetivo simples de criar uma matriz com as dimensões dadas pelo usuário durante a execução do programa, depois preencher todos os elementos da matriz com um caractere também dado pelo usuário, e por fim exibir todos os elementos da matriz na tela. Ignorem o fato de eu não ter liberado memoria por que como disse ainda estou escrevendo o programa então falta algumas partes ainda.
Bom vamos ao que interessa "O erro", o programa esta compilando normalmente sem erros. Porem não consigo executá-lo até o final, ele trava antes de imprimir os elementos da matriz. Eu depurei o programa no visual estúdio e obtive a seguinte mensagem de erro:
"Exception thrown at 0x00CD19CD in SQUARE.exe: 0xC0000005: Access violation writing location 0xCDCDCDCD. If there is a handler for this exception, the program may be safely continued."
Também já consegui localizar o erro só não sei como corrigi-lo :). O erro está na hora de alocar o caractere na matriz, ou seja na função "gravar_char(void)". Desde já agradeço se poderem me ajudar.
OBS. se forem compilar o código em um compilador que não seja o do visual studio, alterem a função "scanf_s" por "scanf" ou então dará erro na compilação.
CÓDIGO:
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // program name: SQUARE // // author: "I.L" //// target: criar uma matriz bidimencional com as dimenções dadas pelo usuario durante a execução do programa ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////libarys#include<iostream>#include<stdio.h>#include<stdlib.h>usingnamespace std;//variaveis globaisint COLUNAS_MATRIZ;int LINHAS_MATRIZ;char**MATRIZ;char CARACTER;//declaraçõa das funçõesvoid menu_inicial(void);void menu_texturas(void);char**Alocar_matriz_real(int linhas,int colunas);void gravar_char(void);void mostrar_matriz(char**vetor);void clearbuffer(void);//função principal (main)int main(void){
system("title SQUARE");
menu_inicial();
system("cls");
menu_texturas();
gravar_char();
mostrar_matriz();
cin.get();return0;}//menu inicial //recebe as dimenções do usuariovoid menu_inicial(void){//aqui é onde o usuario entra com as dimenções da matriz
printf("\tMENU INICIAL\n\n");
printf("Especifique o numero de colunas e o numerode linhas da matriz:\n");
printf("colunas: ");
scanf_s("%i",&COLUNAS_MATRIZ);
clearbuffer();
printf("linhas: ");
scanf_s("%i",&LINHAS_MATRIZ);
clearbuffer();//gerando a matriz
MATRIZ =Alocar_matriz_real(LINHAS_MATRIZ, COLUNAS_MATRIZ);}//menu texturas // da ao usuario a opção de escolher um caracter para peencher sua matrizvoid menu_texturas(void){int escolha;//LISTA DE TESTURASchar text_01 =-78;char text_02 =-79;char text_03 =-80;char text_04 =36;char text_05 =35;char text_06 =38;char text_07 =64;char text_08 =-37;char text_09 =-36;char text_10 =-50;
printf("\t TEXTURAS\n\n");
printf("Escolha uma textura para seu quadrado:");
printf("\n\n");
printf(" _____ _____ _____ _____ _____ _____ _____ _____ _____ ______\n");
printf("| 1 | | 2 | | 3 | | 4 | | 5 | | 6 | | 7 | | 8 | | 9 | | 10 |\n");
printf("| | | | | | | | | | | | | | | | | | | |\n");
printf("| %c | | %c | | %c | | %c | | %c | | %c | | %c | | %c | | %c | | %c |\n", text_01, text_02, text_03, text_04, text_05, text_06, text_07, text_08, text_09, text_10);
printf("|_____| |_____| |_____| |_____| |_____| |_____| |_____| |_____| |_____| |______|\n\n\t\t\t\tEscolha: ");
scanf_s("%i",&escolha);
clearbuffer();while(true){if(escolha <=0|| escolha >10){
printf("\n");while(escolha <=0|| escolha >10){
printf("Erro, valor %i nao permitido! ", escolha);
scanf_s("%i",&escolha);
clearbuffer();}}break;}switch(escolha){case1:
CARACTER = text_01;break;case2:
CARACTER = text_02;break;case3:
CARACTER = text_03;break;case4:
CARACTER = text_04;break;case5:
CARACTER = text_05;break;case6:
CARACTER = text_06;break;case7:
CARACTER = text_07;break;case8:
CARACTER = text_08;break;case9:
CARACTER = text_09;break;case10:
CARACTER = text_10;break;default:
printf("\nErro desconhecido!");
cin.get();break;}}//função que gera a matriz com as dimenções que o usuario passouchar**Alocar_matriz_real(int linhas,int colunas){if(linhas <1|| colunas <1){/* verifica parametros recebidos */
printf("** Erro: Parametro invalido **\n");return(NULL);}/* aloca espaço na memoria para a matriz */char**matriz_aux =(char**)malloc((5*sizeof(char*))-1);if(matriz_aux == NULL){
printf("** Erro: Memoria Insuficiente **");return(NULL);}return(matriz_aux);}//função que aloca o caracter inserido pelo usuariovoid gravar_char(void){//loop que vai alocar o caracter passado pelo usuario em cada elemento da matrizfor(int linhas =0; linhas < LINHAS_MATRIZ;++linhas){for(int colunas =0; colunas < COLUNAS_MATRIZ;++colunas){
MATRIZ[linhas][colunas]=(char)CARACTER;}}}//função que inprime na tela todos os elementos da matrizvoid mostrar_matriz(char**vetor){
printf("\tRESULTADO\n\n");
printf("Quadrado gerado: \n\n");for(int linhas =0; linhas < LINHAS_MATRIZ;++linhas){for(int colunas =0; colunas < COLUNAS_MATRIZ;++colunas){
printf("%c", vetor[linhas][colunas]);}
printf("\n");}}//limpa o buffervoid clearbuffer(void){char c;while((c = getchar()!='\n'&& c != EOF));}
Pergunta
Mr.Dread
Olá, estou fazendo seguinte programa com o objetivo simples de criar uma matriz com as dimensões dadas pelo usuário durante a execução do programa, depois preencher todos os elementos da matriz com um caractere também dado pelo usuário, e por fim exibir todos os elementos da matriz na tela. Ignorem o fato de eu não ter liberado memoria por que como disse ainda estou escrevendo o programa então falta algumas partes ainda.
Bom vamos ao que interessa "O erro", o programa esta compilando normalmente sem erros. Porem não consigo executá-lo até o final, ele trava antes de imprimir os elementos da matriz. Eu depurei o programa no visual estúdio e obtive a seguinte mensagem de erro:
"Exception thrown at 0x00CD19CD in SQUARE.exe: 0xC0000005: Access violation writing location 0xCDCDCDCD. If there is a handler for this exception, the program may be safely continued."
Também já consegui localizar o erro só não sei como corrigi-lo :). O erro está na hora de alocar o caractere na matriz, ou seja na função "gravar_char(void)". Desde já agradeço se poderem me ajudar.
OBS. se forem compilar o código em um compilador que não seja o do visual studio, alterem a função "scanf_s" por "scanf" ou então dará erro na compilação.
CÓDIGO:
Link para o comentário
Compartilhar em outros sites
0 respostass a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.