C++ SIGSEGV

Nikos Kanellopoulos nkan at panafonet.gr
Wed Sep 11 23:18:01 EEST 2002


> Mporeis na steileis ton oso to dynato syntomotero kwdika poy na
> paroysiazei ayto to problhma (mazi me ta minimum lex & yacc arxeia)?
>
> Ase poy me thn parapanw diadikasia mallon 8a breis to bug monos soy :)

Δυστυχώς πρέπει να στείλω πάρα πολλά πράγματα για να μπορέσετε
να μεταγλωττίσετε τον κώδικα.	

Δείτε όμως αυτό.

-rw-rw-r--    1 nk       nk             30 Jul  5 08:20 5.txt
-rw-rw-r--    1 nk       nk             30 Sep 10 21:51 file.txt

ifstream myfile;
myfile.open( "5.txt" /*path*/ ); 

Και αυτό κάνει SIGSEGV!
Και φυσικά, και δικαιώματα να μην υπήρχαν, αυτό δεν σημαίνει
(Νίκο Μ.) ότι πρέπει να προκληθεί segmentation violation.

Μήπως βλέπετε πρόβλημα στα headers:
#include <fstream>
#include <cstdlib>
#include <cstring>
#include <string>
#include <cstdio>
#include <cmath>
#include <ctime>
#include <cassert>

Σ΄αυτά δεν βλέπω κάτι ύποπτο
#include "program_data.h"
#include "NKEsymtab.h"
#include "y.tab.h"
#include "commands.h"
#include "error.h"
#include "print.h"


Παιδιά μην ασχολείστε άλλο. Κάποια στιγμή θα βρω τι φταίει.
Προφανώς δεν μπορείτε να βοηθήσετε χωρίς τον πλήρη κώδικα.
Κάτι ξεσκίζει την μνήμη σε άλλο σημείο και σκάει εδώ. Αφού
όμως το path έχει σωστή τιμή, θέλει debugging σε assembly level
(κάτι δεν μου άρεσε στην αντίστοιχη assembly, αλλά δεν ξέρω 
αρκετά από assembly)


Αυτό δουλεύει:

#include <fstream>
#include <cstdio>
#include <iostream>

using namespace std;

int main (int argc, char* argv[]) {
        ifstream file ;
        char str[20];

        file.open (argv[1] );
        file.getline(str, 20);
        cout << str << endl;
}



-- 
Νίκος Κανελλόπουλος
www.himaira.net



More information about the Linux-greek-users mailing list