Hei Linuxin ja g :n käyttäjät!
seuraavassa on C -ohjelma, joka tallentaa
graafin kytkentälista-tyyppiseen tietorakenteeseen.
kääntäjä on g 4.1.2. ongelmana on
muistialueen ylitys -virhe, kun syötteenä on
esimerkiksi 0 11 22 3Q.
voisiko joku paikantaa virheet. tämä lienee
helppoa Visual C :n debuggerilla. minulla on
käytössä vain hankala ddd ja gdb.
graafin kytkentälista on taulukko, jonka alkiot
sisältävät graafin toisiinsa yhteydessä olevat
pisteet. (graafi on joukko pisteitä ja niitä
yhdistäviä kaaria). alkiot muodostavat kustakin
taulukon alkiosta alkavan alkioiden yksisuuntaisen
listan. (struct alkio) esim. syöte 0 1 luo
taulukkoon listan, jonka arvot ovat 0 (alkupiste)
ja 1 (0-pisteeseen liittyneiden pisteiden joukko.
kiitos neuvoista
graafin kytkentälista
2
328
Vastaukset
- Linux-käyttäjä
tässä lähdekoodi:
#include
#include // malloc() ja atoi()
#include // scanf()
#include // assert()
using namespace std;
struct alkio
{
int arvo;
struct alkio* seuraava;
};
int main()
{
struct alkio* lista[100]; // sadan alkion lista (osoittimia alkioihin)
char syote[4]; int i;
int alkupiste = 0, loppupiste = 0;
struct alkio* solmu = NULL;
struct alkio* apusolmu = NULL;
for (i = 0; i < 100; i )
lista[i] = NULL;
syote[0] = syote[1] = syote[2] = '\0';
while(1)
{
scanf("%s", &syote);
if (syote[0] == 'Q')
break;
alkupiste = atoi(syote);
scanf("%s", &syote);
loppupiste = atoi(syote);
if (lista[alkupiste] == NULL)
{
lista[alkupiste] = (alkio*)malloc(sizeof(alkio));
lista[alkupiste]->arvo = loppupiste;
lista[alkupiste]->seuraava = NULL;
}
else // listassa on vähintään yksi alkio kohdassa lista[alkupiste]
{
solmu = lista[alkupiste];
while(solmu->seuraava)
solmu = solmu->seuraava;
assert(solmu->seuraava == NULL); // nyt solmu osoittaa listan
// viimeiseen alkioon
struct alkio* uusiSolmu = (alkio*)malloc(sizeof(alkio));
solmu->seuraava = uusiSolmu;
uusiSolmu->seuraava = NULL;
solmu->arvo = loppupiste;
}
}
solmu = lista[0];
for (i = 0; i < 10; i )
{
cout seuraava)
{
apusolmu = solmu->seuraava;
cout arvo seuraava;
free( (void*)solmu);
solmu = apusolmu;
}
free( (void*)solmu);
}
solmu = lista[ i];
}
} - Aku Ankka
Ei mulla tuu muistialueen ylitystä:
0 1
1 2
2 3
Q
0->1->
1->1->
2->2->
3->3->
4->
5->
6->
7->
8->
9->
g versio 4.1.3.
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Naiset miltä kiihottuminen teissä tuntuu
Kun miehellä tulee seisokki ja ja sellainen kihmelöinti sinne niin mitä naisessa köy? :)715100Haistoin ensin tuoksusi
Käännyin katsomaan oletko se todellakin sinä , otin askeleen taakse ja jähmetyin. Moikattiin naamat peruslukemilla. Tu162357- 251867
- 441568
- 121561
Miksi kohtelit minua kuin tyhmää koiraa?
Rakastin sinua mutta kohtelit huonosti. Tuntuu ala-arvoiselta. Miksi kuvittelin että joku kohtelisi minua reilusti. Hais51348- 91267
Kyllä poisto toimii
Esitin illan suussa kysymyksen, joka koska palstalla riehuvaa häirikköä ja tiedustelin, eikö sitä saa julistettua pannaa31195"Joka miekkaan tarttuu, se siihen hukkuu"..
"Joka miekkaan tarttuu, se siihen hukkuu".. Näin puhui jo aikoinaan Jeesus, kun yksi hänen opetuslapsistaan löi miekalla71187- 141173