Hej :) Zwracam się do was z ogromną prośbą, mam problem ze znalezieniem błędu w deklaracji wskaźnika, przez co działanie programu jest przerywane przez błąd "access violation reading location". Generalnie mój program tworzy graf, z liczbą wierzchołków określoną przez zmienną "wierzchołki" i liczbą krawędzi "krawędzie". Sypie się w momencie kiedy w ostatniej pętli chcę sprawdzić obecność dodanych wcześniej krawędzi... Wtedy nagle okazuje się, że one magicznie znikają :(
Patrzyłam na ten kod długo i próbowałam w nim grzebać i szukać rozwiązania, ale niestety nic nie poprawia sytuacji...
wklejam link do kodu na pastebin:
https://pastebin.com/Gk2erPKY
i tutaj też (ten sam kod):
#include "stdafx.h"
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;
struct lista
{
int vertex;
lista* nast;
};
int jest_krawedz(lista *a, int b);
int main()
{
int wierzcholki;
int krawedzie;
srand(time(0));
int pom;
int pom2;
lista * zastepca;
for (wierzcholki = 9; wierzcholki < 10; wierzcholki += 1)
{
lista ** tab_w = new lista*[wierzcholki];
krawedzie = (0.6 * wierzcholki*(wierzcholki - 1)) / 2;
for (int j = 0; j < wierzcholki; j++)
{
lista* nowa = new lista;
nowa->vertex = j;
nowa->nast = NULL;
tab_w[j] = nowa;
}
for (int k = 0; k < krawedzie; k++)
{
pom = rand() % wierzcholki;
pom2 = rand() % wierzcholki;
while (pom == pom2 || jest_krawedz(tab_w[pom], pom2))
{
pom = rand() % wierzcholki;
pom2 = rand() % wierzcholki;
}
lista * pierwsza = new lista;
pierwsza->vertex = pom2;
lista * druga = new lista;
druga->vertex = pom;
/*zastepca = tab_w[pom]->nast;
tab_w[pom]->nast = pierwsza;
pierwsza->nast = zastepca;*/
lista* hh = tab_w[pom];
lista* gg = tab_w[pom2];
while (hh->nast != NULL)
{
hh = hh->nast;
}
hh->nast = pierwsza;
/*zastepca = tab_w[pom2]->nast;
tab_w[pom2]->nast = druga;
druga->nast = zastepca;*/
while (gg != NULL)
{
if (gg->nast != NULL)
{
gg = gg->nast;
}
else
{
break;
}
}
gg->nast = druga;
cout << jest_krawedz(tab_w[pom], pom2) << " jest jest " << tab_w[pom]->vertex << " " << tab_w[pom2]->vertex << endl;
cout << jest_krawedz(tab_w[pom2], pom) << " jest jest " << tab_w[pom2]->vertex << " " << tab_w[pom]->vertex << endl;
}
for (int r = 0; r < wierzcholki; r++)
{
for (int p = r + 1; p < wierzcholki; p++)
{
cout << jest_krawedz(tab_w[p], r) << " " << tab_w[p]->vertex << " " << tab_w[r]->vertex << "jesli tu 1" << endl;
cout << jest_krawedz(tab_w[r], p) << " " << tab_w[r]->vertex << " " << tab_w[p]->vertex << "to tu tez" << endl;
}
}
//cout << "wierzcholki to: " << wierzcholki << endl;
//delete[] tab_w;
}
system("pause");
return 0;
}
int jest_krawedz(lista *a, int b)
{
lista *aa = a;
while (aa->nast != NULL)
{
if (aa->nast->vertex != NULL && aa->nast->vertex == b)
{
return 1;
}
aa = aa->nast;
}
return 0;
}