Enviado em 22/07/2021 - 17:34h
Estou construindo um código em C++ que é capaz de manipular um grafo e fazer algumas operações com esse grafo. Após codificar a classe "Grafo", no entanto, toda vez que tento instanciar um novo objeto a partir dessa classe, o depurador emite uma mensagem de erro de violação de acesso a leitura, dizendo que "MyLast" era 0x8 no arquivo vector. Eu não consigo entender bem o que esse erro quer dizer e muito menos o que está causando esse erro, pois aos meus olhos de leigo parece que eu não fiz nada de errado. Vou postar as partes do código que interessa aqui em baixo:#include <string>
#include <cstdlib>
#include <stdlib.h>
#include <cstring>
#include <vector>
#include <fstream>
#include <iostream>
using namespace std;
typedef struct
{
std::vector <int>* caminho;
std::vector <int>* distancia;
}distanciaCaminho;
class DadosDoArquivo
{
public:
int origem;
int destino;
int valor;
};
class Vertice
{
public:
unsigned int id = 0;
std::vector <int>* Antecessores;
std::vector <int>* Sucessores;
std::vector <int>* Adjacentes;
bool EscolhaGulosa = false;
/*std::string cor = "branco";
long int distanciaOrigem = NULL;*/
};
class Grafo
{
private:
void RealocarMatriz(unsigned int novoTamanho);
void CriaVertice(int vertice);
public:
std::string Direcionado;
int QuantidadeDeVertices = 0;
std::vector<std::vector<int>>* MatrizAdjacencia;
std::vector <Vertice>* Vertices;
std::vector<int>* VerticesAdicionados;
bool VerticePreDefinidos;
int QuantidadeDeArestas = 0;
int MaxFluxo;
Grafo(std::string Direcionado, unsigned int QuantidadeDeVertices, unsigned int QtdArestas);
Grafo(const Grafo& grafo) {
this->Direcionado = grafo.Direcionado;
this->QuantidadeDeVertices = grafo.QuantidadeDeVertices;
std::vector<std::vector<int>>* temp = new std::vector<std::vector<int>>(grafo.MatrizAdjacencia->size(), vector <int> (grafo.MatrizAdjacencia[0].size()));
copy(grafo.MatrizAdjacencia->begin(), grafo.MatrizAdjacencia->end(), temp->begin());
this->MatrizAdjacencia = temp;
std::vector <Vertice>* temp1 = new std::vector<Vertice>(grafo.Vertices->size());
copy(grafo.Vertices->begin(), grafo.Vertices->end(), temp1->begin());
this->Vertices = temp1;
std::vector <int>* temp2 = new std::vector<int>(grafo.VerticesAdicionados->size());
copy(grafo.VerticesAdicionados->begin(), grafo.VerticesAdicionados->end(), temp2->begin());
this->VerticesAdicionados = temp2;
this->VerticePreDefinidos = grafo.VerticePreDefinidos;
this->QuantidadeDeArestas = grafo.QuantidadeDeArestas;
}
~Grafo() {};
bool checarExistenciaVertice(int vertice);
std::vector <int>* Sucessores(unsigned int vertice);
std::vector <int>* Antecessores(unsigned int vertice);
void CriaAresta(int origem, int destino, int valor);
distanciaCaminho* MenorCaminhoDijkstra(int origem, int destino);
Grafo* FordFulkerson(int origem, int destino);
};
bool checkValoresValidos(std::string valoresValidos, char valores[]);
std::vector <std::string> splitString(std::string str, const char* op);
std::vector<std::vector<int>>* LerArquivo(std::string arqName);
Grafo::Grafo(std::string Direcionado, unsigned int QuantidadeDeVertices, unsigned int QtdArestas)
{
this->Direcionado = Direcionado;
this->QuantidadeDeVertices = QuantidadeDeVertices;
this->QuantidadeDeArestas = QtdArestas;
if (this->QuantidadeDeVertices != 0) {
this->MatrizAdjacencia->resize(this->QuantidadeDeVertices, vector<int>(this->QuantidadeDeVertices, 0));
this->VerticePreDefinidos = true;
}
else
{
this->MatrizAdjacencia->resize(1, vector<int>(1, 0));
this->VerticesAdicionados->resize(10, 0);
this->VerticePreDefinidos = false;
}
this->Vertices->resize(this->MatrizAdjacencia->size());
}
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Como renomear arquivos de letras maiúsculas para minúsculas
Imprimindo no formato livreto no Linux
Vim - incrementando números em substituição
Efeito "livro" em arquivos PDF
Como resolver o erro no CUPS: Unable to get list of printer drivers
Melhores Práticas de Nomenclatura: Pastas, Arquivos e Código [RESOLVID... (4)
Recuperar arquivos de HD em formato RAW usando Linux (0)
[Python] Automação de scan de vulnerabilidades
[Python] Script para analise de superficie de ataque
[Shell Script] Novo script para redimensionar, rotacionar, converter e espelhar arquivos de imagem
[Shell Script] Iniciador de DOOM (DSDA-DOOM, Doom Retro ou Woof!)
[Shell Script] Script para adicionar bordas às imagens de uma pasta