Ir ao conteúdo
  • Cadastre-se

Lucas Souza_774044

Membro Júnior
  • Posts

    5
  • Cadastrado em

  • Última visita

Tudo que Lucas Souza_774044 postou

  1. O || dentro dos ifs estava certo, porque é para dar esse aviso se qualquer uma das condições for verdadeira; com o &&, só aconteceria por exemplo se o i fosse menor que 0 e maior que o número de linhas ao mesmo tempo, o que obviamente não pode acontecer. Onde está dando erro aí eu não sei dizer de cara... tente fazer algum teste, tipo dando cout em algumas linhas para ver onde exatamente está dando erro, testando vários valores e tal.
  2. Tem 2 erros nesse código. Na função CriaMatriz, você está alocando um array de Mat, e não um objeto: Mat *M= new Mat [lin]; //Troque isso por Mat *M = new Mat(); Na função LiberarMemoria, você está passando um ponteiro de ponteiro como parâmetro, então você não está liberando a memória da matriz, mas sim do endereço dela: void LiberarMemoria(Mat** M){ delete[] (*M)->v; cout<<"!!!!!!!!!!"<<endl; delete M; //Troque isso por delete *M;} Só um outro aviso, nos códigos AdicionarElemento e AcessarElemento, se o usuário digita um valor inválido, o código está avisando que deu um acesso inválido, mas ainda está prosseguindo, o que pode causar outra falha de segmentação dependendo dos valores.
  3. Testei aqui e ao que parece não deu nenhum problema, então o código deve resolver Para a função LiberarMemoria, usei esse código: void LiberarMemoria(Mat **M){ delete[](*M)->v; delete *M;} A função também pode usar um parâmetro do tipo Mat * só, se quiser: void LiberarMemoria(Mat *M){ delete[] M->v; delete M;} Nesse último caso, para chamá-la, é só usar "LiberarMemoria(M);".
  4. Na verdade acredito que o problema é que, na função CriaMatriz(), você está alocando a memória para um array de "lin" objetos do tipo Mat e a armazenando em um ponteiro temporário e ainda retornando o conteúdo daquele ponteiro. Já na main, por sua vez, você está declarando um ponteiro sem inicializá-lo e está tentando atribuir o retorno da CriaMatriz nele, o que está gerando a falha de segmentação. O mais apropriado seria você retornar o ponteiro que alocou na CriaMatriz(), lembrando de, na função LiberarMemoria, liberar tanto a memória do vetor de elementos "v" quanto do objeto Mat. Tente este código: //matriz.h#ifndef matriz_h#define matriz_h typedef struct{ int linhas,colunas,*v;} Mat; Mat* CriarMatriz();void AdicionarElemento(Mat **);void AcessarElemento(Mat **);void getNumeroLinhas(Mat **);void getNumeroColunas(Mat **);void LiberarMemoria(Mat **);#endif//matriz.cpp#include <iostream>#include "matriz.h"using namespace std;Mat* CriarMatriz(){ int lin,col; cout<<"Entre com o numero de linhas"<<endl; cin>>lin; cout<<"Entre com o numero de colunas"<<endl; cin>>col; Mat *M= new Mat(); M->linhas=lin; M->colunas=col; M->v=new int [lin*col]; return M;}//main.cpp#include <iostream>#include "matriz.h"using namespace std;int main(){ Mat *M; M = CriarMatriz(); AdicionarElemento(&M); AcessarElemento(&M); getNumeroLinhas(&M); getNumeroColunas(&M); LiberarMemoria(&M); return 0;} Vou testar ele aqui agora e se der algum problema edito o post.

Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas comunidades sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×
×
  • Criar novo...

 

GRÁTIS: ebook Redes Wi-Fi – 2ª Edição

EBOOK GRÁTIS!

CLIQUE AQUI E BAIXE AGORA MESMO!