neto-tj 0 Denunciar post Postado Agosto 17, 2011 Boa noite pessoal, sou novo aqui no fórum , este é meu primeiro tópico (Y)! Mão na massa. Então, preciso fazer um código que gera uma matriz de um grafo. Aparentemente muito simples, porém percebi que algo esta dando errado: #include <iostream> #include <conio2.h> using namespace std; int main() { // entrada para as ligações int lig1=0, lig2=0, mat[3][3]; //Preencher matriz com 0 for (int i=0; i<4; i++){ for (int j=0; j<4; j++){ mat[i][j] = 0; } } for (int i = 0; i < 5; i++) { cout << "\nDigite as ligacoes:"; cin >> lig1 >> lig2; mat[lig1-1][lig2-1] = 1; mat[lig2-1][lig1-1] = 1; //imprime matriz for (int k = 0; k < 4; k++) { for (int j = 0; j < 4; j++) { cout << mat[k][j]; } cout << endl; } } return 0; } Por exemplo, quando você digita as ligações, esses números, que são uma posição na matriz, vira 1, obs.: a matriz esta zerada!!! Ex se você digitar neste programa: "1" 'enter' "2", ele vai fazer o seguinte: 1 --> ir na posição da matriz [0][1], e atribuir o valor de = '1'; e vice versa, matriz[1][0] = 1. Pra quem executou o código pode perceber apareceu um erro, quando você digita 1 e 2, a matriz impressa deveria ser assim: 0100 1000 0000 0000 Mas por algum motivo ela esta sendo impressa desa forma: 0101 <-- 1000 0000 0000 Apareceu '1' na posição [0][3], mas Porque? Estou tentando muito resolver este erro, se alguém conseguiu, por favor poste o resultado. Agradeço desde já e obrigado ao fórum!!! Compartilhar este post Link para o post Compartilhar em outros sites
HwapX 20 Denunciar post Postado Agosto 20, 2011 Simples declarou uma matriz 3x3 mais a usa como se fosse uma de 4x4. 3x3 0 0 0 0 0 0 0 0 0 4x4 = 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 Agora vamos a explicação do porque daquele 1. quando você acessa a posição 3x0 em uma matriz de 3x3 por exemplo, você esta pegando o valor da posição 1x0. logo se a matriz esta assim. 1 0 0 0 1 0 0 0 0 da forma que você esta imprimindo atualmente 4x4, o resultado é o seguinte em relação a matriz declarada. 0x0 0x1 0x2 1x0 1x0 1x1 1x2 2x0 2x0 2x1 2x2 2x3 3x0 3x1 3x2 3x3 Isso se deve a forma com que a matriz é armazenada na memoria, mais isso não vou explicar. Repare nas partes em azul isso vai responder sua pergunta sobre o 1. As posições em vermelho são lugares não alocados para essa matriz, você esta acessando e alterando partes da memoria que não devia e podem estar sendo usadas por outra variável e que cedo ou tarde pode gerar um falha de segmentação. Compartilhar este post Link para o post Compartilhar em outros sites