Sockets Unix套接字-信号SIGABRT
我目前正在从事服务器/客户端unix套接字项目。 这是一种纸牌游戏。当服务员给我卡片时,我遇到了一个问题 我使用这些结构:Sockets Unix套接字-信号SIGABRT,sockets,unix,send,Sockets,Unix,Send,我目前正在从事服务器/客户端unix套接字项目。 这是一种纸牌游戏。当服务员给我卡片时,我遇到了一个问题 我使用这些结构: typedef struct Carte { int valeur; enum Couleur {COEUR,CARREAU,TREFLE,PIQUE} couleur; } Carte; typedef struct Message { int type; char message[256]; Carte cartes[4]; } Mess
typedef struct Carte {
int valeur;
enum Couleur {COEUR,CARREAU,TREFLE,PIQUE} couleur;
} Carte;
typedef struct Message {
int type;
char message[256];
Carte cartes[4];
} Message;
typedef struct Noeud {
Carte* carte;
struct Noeud* suivant;
} Noeud;
typedef struct Joueur {
char nom[50];
int points;
int nombreCarteDeck;
int nombreCarteReserve;
Carte deck[52];
Carte reserve[52];
int indice;
} Joueur;
当我在gdb中启动此功能时:
void distributionCarte( Joueur(* joueurs)[] , int nbreJoueurs, int (* client_socket)[], Message (* messages)[], fd_set * readfds ) {
int val;
int coul;
Carte cartes[nbreJoueurs][52/nbreJoueurs];
Noeud* courant = (Noeud*)malloc(1*sizeof(Noeud));
Noeud* premier = courant;
Carte* carte;
for(val = 1; val < 14; val++){
for(coul = 1; coul < 5; coul++){
carte = (Carte*)malloc(1*sizeof(Carte));
carte->valeur = val;
carte->couleur = coul;
courant->carte = carte;
if(val != 13 || coul != 4){
courant->suivant = (Noeud*)malloc(1*sizeof(Noeud));
courant = courant->suivant;
}
}
}
courant->suivant = premier;
Noeud* test = premier;
int i;
int j;
Carte* carteADonner;
int random;
int joueur;
int nbreCartes[nbreJoueurs];
for(joueur = 0; joueur<nbreJoueurs; joueur++){
nbreCartes[joueur] = 0;
}
joueur = 0;
for(i = 1; i < 53; i++){
srand(time(NULL)*i);
random = rand()%52;
for(j = 0; j<random; j++){
courant = courant->suivant;
}
carteADonner = courant->suivant->carte;
courant->suivant = courant->suivant->suivant;
int indice = nbreCartes[joueur]++;
cartes[joueur][indice] = *carteADonner;
joueur++;
if(joueur >= nbreJoueurs)joueur = 0;
}
Message mes;
for(i = 0; i<nbreJoueurs; i++){
FD_SET((*client_socket)[i], readfds);
for(j = 0; j < 52/nbreJoueurs; j++){
printf("joueur = %d, valeur = %d, couleur = %d\n", i+1, cartes[i]
[j].valeur, cartes[i][j].couleur);
mes.cartes[j] = cartes[i][j];
mes.type = DISTRIBUTION_CARTE;
strncpy(mes.message,"\0",1);
(*messages)[(*joueurs)[i].indice] = mes;
writeMessageForClient((*joueurs)[i].indice, *messages, readfds,
client_socket , nbreJoueurs);
}
}
printf("DISTRIBUTION_CARTE FINI \n");
}
void distributionCarte(jouer(*jouers)[],int-nbrejouers,int(*client_socket)[],Message(*messages)[],fd_set*readfds){
int-val;
国际法院;
点菜[NBREjouers][52/NBREjouers];
Noeud*courant=(Noeud*)malloc(1*sizeof(Noeud));
Noeud*premier=courant;
点菜*点菜;
对于(val=1;val<14;val++){
对于(coul=1;coul<5;coul++){
carte=(carte*)malloc(1*sizeof(carte));
carte->valeur=val;
点菜->couleur=coul;
courant->carte=carte;
如果(val!=13 | | coul!=4){
courant->suivant=(Noeud*)malloc(1*sizeof(Noeud));
courant=courant->suivant;
}
}
}
courant->suivant=premier;
Noeud*测试=卓越理财;
int i;
int j;
点菜*点菜;
int随机;
国际期刊;
int nbreCartes[NBREJOUERS];
对于(JouerU=0;JouerSuivant->carte;
courant->suivant=courant->suivant->suivant;
int indice=nbreCartes[jouer]++;
点菜[jouer][indice]=*点菜;
Jouer++;
如果(jouer>=nbrejouers)jouer=0;
}
消息mes;
对于(i=0;i您从未测试过任何动态分配…堆栈破坏意味着您的代码试图执行一些缓冲区溢出。问题不在这个distributionCarte函数中。在那之后,您正在调用哪个函数?这很奇怪。gdb欺骗了我。之后的函数可以工作(并且它不使用它)你从未测试过你的任何动态分配…堆栈崩溃意味着你的代码试图做一些缓冲区溢出。问题不在这个distributionCarte函数中。在那之后你调用哪个函数?这很奇怪。gdb骗了我。之后的函数可以工作(而且它不使用它)
.... // n times joueur = %d , valeur = %d , couleur = %d
joueur = 2, valeur = 9, couleur = 3
joueur = 2, valeur = 11, couleur = 4
joueur = 2, valeur = 3, couleur = 1
joueur = 2, valeur = 12, couleur = 1
DISTRIBUTION_CARTE FINI
*** stack smashing detected ***:
/media/sf_SHARED_FOLDER_LINUX/projetUnix/Server terminated
Program received signal SIGABRT, Aborted.
0x00007ffff7826267 in __GI_raise (sig=sig@entry=6)
at ../sysdeps/unix/sysv/linux/raise.c:55
55 ../sysdeps/unix/sysv/linux/raise.c: No such file or directory.
(gdb) where
#0 0x00007ffff7826267 in __GI_raise (sig=sig@entry=6)
at ../sysdeps/unix/sysv/linux/raise.c:55
#1 0x00007ffff7827eca in __GI_abort () at abort.c:89
#2 0x00007ffff7869c53 in __libc_message (do_abort=do_abort@entry=1,
fmt=fmt@entry=0x7ffff797fdad "*** %s ***: %s terminated\n")
at ../sysdeps/posix/libc_fatal.c:175
#3 0x00007ffff7909e8c in __GI___fortify_fail (msg=<optimized out>,
msg@entry=0x7ffff797fd95 "stack smashing detected") at fortify_fail.c:38
#4 0x00007ffff7909e30 in __stack_chk_fail () at stack_chk_fail.c:28
#5 0x0000000000402710 in distributionCarte ()
#6 0x0000000200000001 in ?? ()
#7 0x0000000a00000001 in ?? ()
#8 0x0000000600000003 in ?? ()
#9 0x0000000800000002 in ?? ()
#10 0x0000000500000002 in ?? ()
#11 0x0000000300000003 in ?? ()
#12 0x0000000200000004 in ?? ()
#13 0x0000000400000002 in ?? ()
#14 0x0000000d00000003 in ?? ()
#15 0x0000000900000003 in ?? ()
#16 0x0000000b00000003 in ?? ()
#17 0x0000000300000004 in ?? ()
#18 0x0000000c00000001 in ?? ()