Προς το περιεχόμενο

Segmentation fault


delfini69

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπερα..

Εχω κανει ενα προγραμμα με client/server σε γλωσσα "C", το οποιο κανει compile αλλα οταν το τρεχω πεταει "segmentation fault"..Με καποιες printf παρατηρω πως ο κωδικας κολλαει σχετικα στην αρχη, στις δηλωσεις μεταβλητων ...Ξερει κανεις τι μπορει φταει;;

Ευχαριστω..

Δημοσ.
Καλησπερα..

Εχω κανει ενα προγραμμα με client/server σε γλωσσα "C", το οποιο κανει compile αλλα οταν το τρεχω πεταει "segmentation fault"..Με καποιες printf παρατηρω πως ο κωδικας κολλαει σχετικα στην αρχη, στις δηλωσεις μεταβλητων ...Ξερει κανεις τι μπορει φταει;;

Ευχαριστω..

 

Δε μας βάζεις το τμήμα του κώδικα που δηλώνεις τις μεταβλητές και το τμήμα που πετάει το λάθος (ή και όλο τον κώδικα αν θες), μπας και μπορέσουμε να σε βοηθήσουμε?

Δημοσ.

Ακολουθεί ο κώδικας για τον server, πιθανόν να ειναι γενικά λάθος ορισμένα και τα socket...Το πρόβλημά μου είναι ότι κάνει compile αλλά όταν το τρέχω πετάει "Segmentation fault", έχω σημειώσει το σημείο αυτό...Έχει κάποιος καμία ιδέα για το τι μπορεί φταίει;;;;

Ευχαριστώ...

 

 

Ο κώδικας για τον cerver είναι ο ακόλουθος:

 

int main()

{ typedef struct addr{ /*dimiourgeia mnimis*/

char A[250];

char P[250];

char K[250];

char Z[250];

char senderA[15];

char senderP[15];

char senderK[15];

char senderZ[15];

}addr;

addr *mem;

mem=malloc(1000 * sizeof(addr)); /*Desmefsi koinis mnimis gia eisagwgi to poly 1000 anankoinwsewn*/

typedef struct members { /*dimiourgeia domis gia ta onomata twn xristwn*/

char log[15];

} membersof;

membersof *username;

username=malloc(3*sizeof(membersof)); /*Desmefsi tis domis gia ta onomata twn xristwn, me megisto aritho xaraktirwn 15*/

strcpy(username[0].log,"ΑΑΑ"); /*Gemisma tis domis me ta onomata xristwn*/

strcpy(username[1].log,"ΒΒΒ");

strcpy(username[2].log,"ΓΓΓ");

 

sem_t *my_sem; /*Dimiourgia simaforou*/

my_sem = sem_open(SEM_NAME, O_CREAT | O_RDWR,S_IRUSR | S_IWUSR, 1);

if (my_sem== SEM_FAILED) {

printf("Could not open semaphore!\n");

}

int i;

int s, s2, t, len, a, b, c, d, n, done;

a=0; /*metritis, pou deixnei ti thesi tis teleftaias anakoinwsis sta athlitika*/

int *cntA,*cntP,*cntK,*cntZ;

 

/*Ews edw trexei........apo edw k katw petaei segmentation fault.............*/

 

*cntA=a;

b=0; /*metritis, pou deixnei ti thesi tis teleftaias anakoinwsis stin politiki*/

*cntP=b;

c=0; /*metritis, pou deixnei ti thesi tis teleftaias anakoinwsis sto kairo*/

*cntK=c;

d=0; /*metritis, pou deixnei ti thesi tis teleftaias anakoinwsis sta zwdia*/

*cntZ=d;

char buf2[256]; /*O buf2 pernaei tin anakoinwsi pou thelei na kanei kathe fora o kathe xristis stin mnimi*/

char buf; /*O buf xrisimopoieitai gia geniki epikoinwnia client/server*/

char str[100];

char *mnma, *mnmp, *mnmz, *mnmk; /*deiktes gia to perasma twn anakoinwsewn*/

char *sena, *senp, *senz, *senk; /*deiktes gia to perasma twn syntaktwn twn anakoinwsewn*/

struct sockaddr_un{

int sun_family;

char sun_path;

}local, remote;

 

s=socket(AF_UNIX, SOCK_STREAM, 0); /*Dimiourgeia socket*/

if(s<0)

{

printf("server socket failure %d\n",errno);

perror("server: ");

exit(1);

}

local.sun_family=AF_UNIX;

strcpy(local.sun_path,SOCK_PATH);

len=strlen(local.sun_path)+sizeof(local.sun_family);

if(bind(s,(struct sockaddr *)&local,len)==-1) { /*Syndesi tou socket, s, me tin diefthinsi tis domis sockaddr*/

perror("bind");

exit(1);

}

if(listen(s,5)==-1) { /*Dexetai o server mia klisi enos client*/

perror("listen");

exit(1);

}

for(;{...

...

...}

................................

Δημοσ.

Ότι πήρε το μάτι μου (μπορεί να υπάρχουν κι άλλα)

Τα cntA, cntP, cntK, cntZ δεν έχουν αρχικοποιηθεί και άρα δείχνουν σε μη έγκυρη θέση μνήμης. Η *cntA = a; κλπ σου δίνει το segmentation fault

 

Πιο κάτω έχεις ξεχάσει τον ορισμό του sun_path ως πίνακα χαρακτήρων

>
struct sockaddr_un{
int sun_family;
char sun_path;
}local, remote;

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...