C++ SIGSEGV
Μάριος-Άγγελος Τριβυζάς
invader at hol.gr
Thu Sep 12 17:09:01 EEST 2002
On Wednesday 11 September 2002 23:16, Nikos Kanellopoulos wrote:
> > 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;
> }
Δοκίμασε: export MALLOC_CHECK_=1
και μετά τρέξε gdb για να δεις που ακριβώς χτυπάει.
--
Real programmers don't document; if it was
hard to write, it should be hard to understand.
More information about the Linux-greek-users
mailing list