Linuxon szegmens hiba

Linuxon szegmens hiba
2007-12-04T02:38:31+01:00
2007-12-04T11:48:50+01:00
2022-11-06T22:15:45+01:00
zombilla
windowson jó a program, ssh által tesztelve linuxon nem annyira. lefordul, de futtani nem tudom.

a progi:

#include <stdio.h> #include <stdlib.h> #include <vector> using namespace std; static vector<int>::iterator it; static bool hibus=0; enum paletta {feher, szurke, fekete, piros}; class Csucs { public: int sorszam; int val; vector<int> szomszed; paletta szin; }; void melyBejar(int sorszam, Csucs *Munka) { Munka[sorszam].szin=szurke; for(it=Munka[sorszam].szomszed.begin(); it<Munka[sorszam].szomszed.end(); it++) { if(Munka[*it].szin == feher) { melyBejar(*it, Munka); } else { hibus=1; } } Munka[sorszam].szin=fekete; } void melyKeres(Csucs *Munka, int meret) { for(int i=1; i<=meret; i++) Munka[i].szin=feher; for(int i=1; i<=meret; i++) { if(Munka[i].szin == feher) melyBejar(i, Munka); } } int main() { FILE * in; FILE * out; in = fopen("be.txt","rt"); out = fopen("ki.txt","wt"); int n, m, x, y; vector<int> Eredmeny, Sor; fscanf(in, "%d %d/n", &n, &m); Csucs Munka[n]; for(int i=1; i<=n; i++) { fscanf(in, "%d ", &Munka[i].val); Munka[i].sorszam=i; } for(int i=1; i<=m; i++) { fscanf(in, "%d %d/n", &x, &y); Munka[x].szomszed.push_back(y); } for(int i=1; i<=n; i++) Munka[i].szin=feher; Munka[1].szin=szurke; Sor.push_back(1); int elem; while(!Sor.empty()){ elem=Sor.front(); for(it=Munka[elem].szomszed.begin(); it<Munka[elem].szomszed.end(); it++) { if(Munka[*it].szin==feher) { if(Munka[*it].val == Munka[elem].val) { Munka[*it].szin=szurke; Sor.push_back(Munka[*it].sorszam); } else { if(Munka[*it].szin != piros) { Sor.push_back(Munka[*it].sorszam); Munka[*it].szin=piros; } } } } Sor.erase(Sor.begin()); Munka[elem].szin=fekete; Eredmeny.push_back(Munka[elem].sorszam); } if(hibus!=1) { for(int i=0; i<Eredmeny.size(); i++) { fprintf(out, "%d ", Eredmeny[i]); } } else { fprintf(out, "0"); } return 0; }

köszönöm a segítséget
Mutasd a teljes hozzászólást!
Csucs Munka[n];

Ezt a VC++ le se forditja. Deklarald mutatonak Munka-t, es hozd letre new-el a tombot!
Mutasd a teljes hozzászólást!

  • Mi be.txt-nek a tartalma?
    Mutasd a teljes hozzászólást!
  • Nem ellenorzod, hogy sikerult-e megnyitni a ki.txt-t es a be.txt-t, valamint az olvasasok-irasok sikeret sem. Ezek kozul barmelyik miatt elhasalhat a progi. Nezd meg, jo helyen van-e a be.txt, van-e olvasasi jogod ra, irasi jogod a program futasi konyvtarara (ahova a be.txt kerulne), van-e futtatasi jogod a progira, stb, sok oka lehet.

    Es irj bele hibakezelest!
    Mutasd a teljes hozzászólást!
  • kopipésztelek ha nem baj :)

    Egy ház építési terve n különbözo munkát tartalmaz. A munkákat úgy tervezték, hogy mindegyiket pontosan
    egy nap alatt lehet elvégezni. A terv tartalmaz olyan megelozési eloírásokat, hogy adott a és b munka esetén
    az a munkát elobb kell elvégezni, mint a b munkát. A munkákat három különbözo vallakozó fogja elvégezni. A
    költségek csökkentése miatt a munkákat olyan sorrendben lenne célszeru elvégezni, hogy mindegyik vállalkozó az
    általa vállalt munkákat egymást követo napokon végezze. Persze be kell tartani a megelozési eloírásokat is.
    Írjon olyan programot, amely kiszámítja a munkáknak egy olyan sorrendjét, ha létezik, amely betartja a
    megelozési eloírásokat és mindhárom vállalkozó a munkáit egymást követo napokon végzi!
    Bemeneti specifikáció
    A be.txt szöveges állomány elso sora két egész számot tartalmaz egy szóközzel elválasztva, a munkák n számát
    (1 n 10000) és a megelozési eloírások m számát (1 m 200000). A munkákat az 1; : : : ; n számokkal
    azonosítjuk. A második sor pontosan n számot tartalmaz, ezek értéke 1,2 vagy 3 lehet. Az i-edik szám azt adja
    meg, hogy az i-edik munkát melyik vállalkozó fogja elvégezni. A további m sor mindegyike egy a b számpárt
    tartalmaz, (1 a; b n; a 6= b), amely egy megelozési eloírás, tehát azt jelenti, hogy az a munkát elobb kell
    elvégezni, mint a b munkát.
    Kimeneti specifikáció
    A ki.txt szöveges állomány elso és egyetlen sora n egész számot tartalmazzon, a munkáknak egy olyan felsorolását,
    amelyre teljesül az összes megelozési eloírás, és mindhárom vállalkozó egymást követo napokon végzi
    az általa vállalt munkákat.
    Ha nem lehet a kívánt sorrendben elvégezni a munkákat, akkor az egyetlen 0 számot kell kiírni.
    Több megoldás esetén bármelyik megadható.


    nem nehéz kitalálni hogy kötelezö feladatról van szó, amilyenböl itt is naponta fölbukkan egykét darab (mellesleg ez sincs is még kész sajna). úgyhogy jelen esetben azért lenne tök fölösleges a file megnyitásának ellenörzése, mert ha nem egyezik a kimenet a helyes kimenettel akkor tökmindegy hogy lekezeltem-e a hibát, 0 pontot kapok. az feltételezhetö hogy a feladat könyvtárában ott van(nak) a be.txt(-k).
    Mutasd a teljes hozzászólást!
  • Nem epp ezt kedeztem...
    Mutasd a teljes hozzászólást!
  • hát? számok vannak space-szel ill. enterrel elválasztva.
    Mutasd a teljes hozzászólást!
  • hoppá, tényleg.
    Mutasd a teljes hozzászólást!
  • Ahogy már írták is, az első hiba az, hogy nem ellenőrzöd a fopen-ek sikerét.
    A második, hogy nem tettél ide egy példa 'be.txt'-t.
    A harmadik, hogy nem írtad le, hogy mit kellett volna csináljon a program, és mit csinál ehelyett.
    Az már csak apróság, hogy a \n helyett egységesen mindenhol /n van.
    Mutasd a teljes hozzászólást!
  • Linux-on van VC++? A g++ símán megeszi a dinamikus tömböt lokális változóként.
    Mutasd a teljes hozzászólást!
  • Linux-on van VC++?


    Nem tudok rola.

    A g++ símán megeszi a dinamikus tömböt lokális változóként.


    Bizony meg, viszont a tomb meretenek Stroustrup szerint is konstans kifejezesnek kell lennie.
    Mutasd a teljes hozzászólást!
  • Supsup nem éppen mai csirke... Ez egy C99-extension, ha jól blöffölök. Példa:

    /* dinc.c */ #include <stdio.h> #include <stdlib.h> int main (int argc, char **argv) { int n; n= argc>1 ? atoi(argv[1]) : 17; int s[n]; printf ("sizeof (s)=%d\n", sizeof (s)); return 0; } $ ./dinc sizeof (s)=68 $ ./dinc 77 sizeof (s)=308
    Mutasd a teljes hozzászólást!
  • ISO/IEC 14882:2003-bol:

    8.3.4 Arrays [dcl.array]
    1 In a declarationT D where D has the form
    D1 [constant-expressionopt]
    ...

    If the constant-expression
    (5.19) is present, it shall be an integral constant expression and its value shall be greater than zero.


    Valszeg egy gcc-szpecifikus feature...
    Mutasd a teljes hozzászólást!
  • > Valszeg egy gcc-szpecifikus feature...

    Valószínűleg. Viszont nagyon praktikus... én magam nem használnám, mert nem horozható; különben, van erre szabványos megoldás, az 'alloca'
    Mutasd a teljes hozzászólást!
  • /n azért van, emert utánanéztem a többi hasonló témában és azt írták hogy linux alatt nincs balra dölö perjel. azóta nyilván rájöttem hogy ez az elérési utakra vonatkozik és visszajavítottam.

    azért nem írtam bövebben mert múltkor egy másik programomból bemásoltam mittudomén két függvényt, erre megkaptam hogy csak azt írjam ahol úgy vélem hogy hiba van. másrészt nekem úgy tünt hogy a házi feladatokra eléggé háklis itt mindenki, ezért nem másoltam be a specifikációkat, hogy ne tünjön úgy, hogy. nehéz a kedvetekben járni 'ázz.
    Mutasd a teljes hozzászólást!
  • "másrészt nekem úgy tünt hogy a házi feladatokra eléggé háklis itt mindenki, ezért nem másoltam be a specifikációkat, hogy ne tünjön úgy, hogy. nehéz a kedvetekben járni 'ázz."


    Itt ebben a topikban senki sem panaszkodot azért, mert egy kötelező feladatodról van szó. Az olyan topikokban fordul csak elő, ahol nyilván valóan látszik, hogy a topiknyitó még csak meg sem próbálta megoldani a feladatát, csak nagypofával betolja ide a megkapott specifikációt. A te esetedben azért látszik, hogy dolgoztál vele, és persze nem konkrét teljes megoldást vársz, hanem a saját magad által kreált kódod problémáját próbálod a fórumozók segítségével megfejtetni. Ilyen esetben senki sem fog megszólni, mert dolgoztál vele. Az ilyet erre felé is megbecsülik...
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd