Ir para conteúdo
Fórum Script Brasil

Pergunta

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>
using namespace std;
 
//variaveis globais
int COLUNAS_MATRIZ;
int LINHAS_MATRIZ;
char **MATRIZ;
char CARACTER;

//declaraçõa das funções
void 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();

	return 0;
}

//menu inicial //recebe as dimenções do usuario
void 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 matriz
void menu_texturas(void)
{
	int escolha;
  
  	//LISTA DE TESTURAS
    char 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)
	{
	case 1:
		CARACTER = text_01;
		break;

	case 2:
		CARACTER = text_02;
		break;

	case 3:
		CARACTER = text_03;
		break;

	case 4:
		CARACTER = text_04;
		break;

	case 5:
		CARACTER = text_05;
		break;

	case 6:
		CARACTER = text_06;
		break;

	case 7:
		CARACTER = text_07;
		break;

	case 8:
		CARACTER = text_08;
		break;

	case 9:
		CARACTER = text_09;
		break;

	case 10:
		CARACTER = text_10;
		break;

	default:
		printf("\nErro desconhecido!");
		cin.get();
		break;
	}
}

//função que gera a matriz com as dimenções que o usuario passou
char **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 usuario
void gravar_char(void)
{
	//loop que vai alocar o caracter passado pelo usuario em cada elemento da matriz
	for (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 matriz
void 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 buffer
void clearbuffer(void)
{
	char c;
	while ((c = getchar() != '\n' && c != EOF));
}

   

Link para o comentário
Compartilhar em outros sites

0 respostass a esta questão

Posts Recomendados

Até agora não há respostas para essa pergunta

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.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...