Nowe posty

Autor Wątek: Montowanie  (Przeczytany 256 razy)

Adis

  • Gość
Montowanie
« dnia: 2006-05-22, 12:32:15 »
Mam problem z uruchomieniem programu.Kompiluje go za pomoca komendy:
gcc proj.c -o proj.out
kompiluje sie bez bledów, a przy próbie uruchomienia
./proj.out
wyskakuje mi komunikat:
naruszenie ochrony pamięci

Jezeli ktos mial podobny problem a wie jak go rozwiazac to prosze o pomoc.
Pozdrawiam

greg000

  • Gość
Montowanie
« Odpowiedź #1 dnia: 2006-05-22, 12:44:36 »
Poprawic kod programu.

Adis

  • Gość
Montowanie
« Odpowiedź #2 dnia: 2006-05-22, 12:58:12 »
Program wygląda tak:
///////////////////////////////////
#include
#include
#include

void handler(int signal) {
  printf(\\"Wcisnales [ctrl+c] (sygnal nr: %d) \\"
  \\"- zakonczenie dzialania programun\\",
  signal);
  exit(1);
  return ;
}

int main() {

  struct sigaction *signal;
  signal->sa_handler = &handler;

  if(sigaction(SIGINT, signal, NULL) == -1) {
    puts(\\"Nie mozna obsluzyc sygnalu\\");
    exit(-1);
  }

  while(1);

  return 0;
}
/////////////////////////////

ja nie widze tutaj błędu...Co nie znaczy że go tu nie ma:)
A wedlug Ciebie?
Jesli tez nie widzisz blędu to czy moglbys go sprawdzic u siebie i napisac czy wyskakuje ten sam komunikat? Z gory dziekuje...

micu

  • Gość
Montowanie
« Odpowiedź #3 dnia: 2006-05-22, 13:29:42 »
2006-05-22 12:58:12 Adis napisał:

 >
 >   struct sigaction *signal;
 >   signal->sa_handler = &handler;
 >

Cześć!

Tworzysz wskaźnik do struktury, ale nie alokujesz dla niej pamięci, za to natychmiast ustawiasz jedno z jej pól. Wskaźnik nie jest zainicjowany - a więc wskazuje na pewno na obszar chroniony przed zapisem (np. 0x00000000)! Wskazówka: zaalokuj pamięć (np. malloc) i wówczas \\"signal\\" będzie wskazywało na poprawny adres w pamięci procesu. Dopiero wówczas zapisuj pola struktury.

Pozdrawiam
Micu

Adis

  • Gość
Montowanie
« Odpowiedź #4 dnia: 2006-05-22, 14:01:00 »
2006-05-22 13:29:42 micu napisał:
Czyli twierdzisz, ze jesli napisze:

 >  >   struct sigaction *signal=malloc(sizeof(struct));
 >  >   signal->sa_handler = &handler;
 
to powinno byc dobrze tak?
Hmm...
niesety sprawdzic to bede mogl dopiero wieczorem jak wroce do domu. Mysle ze to moze byc to:) Dzieki za wskazowke Micu i pozdro dla Ciebie.

Stilgar

  • Gość
Montowanie
« Odpowiedź #5 dnia: 2006-05-22, 14:08:26 »
2006-05-22 14:01:00 Adis napisał:

> 2006-05-22 13:29:42 micu napisał:
 > Czyli twierdzisz, ze jesli napisze:
 >
 >  >  >   struct sigaction *signal=malloc(sizeof(struct));
 >  >  >   signal->sa_handler = &handler;
 >  
 > to powinno byc dobrze tak?
 > Hmm...
 > niesety sprawdzic to bede mogl dopiero wieczorem jak wroce do domu. Mysle ze to moze byc to:)
 > Dzieki za wskazowke Micu i pozdro dla Ciebie.

a nie
struct sigaction *signal=malloc(sizeof(struct sigaction));
?

Adis

  • Gość
Montowanie
« Odpowiedź #6 dnia: 2006-05-22, 14:21:55 »
> struct sigaction *signal=malloc(sizeof(struct sigaction));

Oczywiście tak...Teraz tylko pozostaje sprawdzić czy to rozwiąże moj problem...Mam nadzieje ze tak...Na razie dzięki Micu za pomoc...

micu

  • Gość
Montowanie
« Odpowiedź #7 dnia: 2006-05-22, 14:28:22 »
2006-05-22 14:08:26 Stilgar napisał:

> 2006-05-22 14:01:00 Adis napisał:
 >
 > > 2006-05-22 13:29:42 micu napisał:
 >  > Czyli twierdzisz, ze jesli napisze:
 >  >
 >  >  >  >   struct sigaction *signal=malloc(sizeof(struct));
 >  >  >  >   signal->sa_handler = &handler;
 >  >  
 >  > to powinno byc dobrze tak?
 >  > Hmm...
 >  > niesety sprawdzic to bede mogl dopiero wieczorem jak wroce do domu. Mysle ze to moze byc
 > to:)
 >  > Dzieki za wskazowke Micu i pozdro dla Ciebie.
 >
 > a nie
 > struct sigaction *signal=malloc(sizeof(struct sigaction));
 > ?

Stilgar napisał to dobrze więc nie mam już nic do dodania... no może to, że jestem C-konserwatystą i ja bym napisał to tak:

struct sigaction *signal ;
signal=(struct sigaction*)malloc(sizeof(struct sigaction));

:-)))

Pozdrowienia!
Micu

Adis

  • Gość
Montowanie
« Odpowiedź #8 dnia: 2006-05-22, 17:07:46 »
Dziękuje bardzo za pomoc Micu i Stilgar. Teraz juz wszystko ok.:) Dzieki wam zaoszczędzilem troche czasu...
Pozdrawiam

mibie

  • Gość
Montowanie
« Odpowiedź #9 dnia: 2006-05-22, 11:45:19 »
Mam banalne pytanie, jestem poczatkujacy wiec prosze sie nie smiac ;):
Mam komputer z serwerem samby i drugi komputer z ftp. Chcialbym zamontowac na kompie z ftp dysk samby tam gdzie mam publiczny katalog np home/server/samba. Jak zamontowac ta sciazke??

Z gory dziekuje za odpowiedz