
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());
}
Bluefin - A nova geração de ambientes de trabalho Linux
Como atualizar sua versão estável do Debian
Cirurgia para acelerar o openSUSE em HD externo via USB
Quer auto-organizar janelas (tiling) no seu Linux? Veja como no Plasma 6 e no Gnome
Copiando caminho atual do terminal direto para o clipboard do teclado
Script de montagem de chroot automatica
archlinux resolução abaixou após atualização (16)
Conselho distribuiçao brasileira (7)
Não consigo instalar distro antiga no virtualbox nem direto no hd (33)









