j'obtenir une erreur de segmentation, tout comparer membre de struct 0. La partie déroutante est que la comparaison ne se produisent plusieurs fois suivi d'un écrasement.Segmentation fault tandis que l'accès struct non null Membre-
aidez s'il vous plaît. code:
Dword addup(void)
{
Symbol *curr=NULL;
Dword ans=0;
plast->next=NULL;
if((phead==NULL) || (plast==NULL))/*checks that the global pointer to the head & tail is not null.*/
return 0;
curr=phead;
printf("point 1 in addup()********\n");
for(; curr!=NULL ; curr=curr->next)
{
if(curr!=NULL)
{
if( ((curr->feature.oper)==0) && ((curr->feature.ext)==0) )/*crash here !*/
{
puts("point 2AA in addup()********");
curr->adess=+IC;
ans++;
}
puts("point 2B in addup()********");
}
if((curr->next)==NULL)
break;
}
if( (curr!=NULL) && (plast!=NULL))
{
if(curr==plast)/*meaning all the list been searched.*/
return ans;
}
return (-1); }
Et le symbole:
typedef struct snode {
char label[MAXLABEL];
Dword adess;
struct
{
unsigned int ext:1;
unsigned int oper:1;
}feature;
struct snode *next;
}Symbol;
Merci à tous ceux qui aide!.
** premier edit- PHEAD est un pointeur sur la tête de la liste. plast est un pointeur vers le dernier noeud (symbole) de la liste. initialisé dans une autre fonction. plast-> next est toujours null (c'est au début de la fonction - parce que je veux être sûr).
** deuxième edit- La fonction de création -
void csymbl(Dword addess, char *name, Dword ext, Dword ope){
tempnode.adess=addess;/*tempnode is a global Symbol,that been used to insert new nodes.*/
strcpy(tempnode.label,name);
tempnode.feature.ext=ext;
tempnode.feature.oper=ope;
tempnode.next=NULL;}
Et la fonction, qui se connectent à la liste:
void addsymbol(Symbol a){
if(phead==NULL)/*if phead point to NULL - meaning this is the first symbol been entered & up now the linked list was empty. */
{
phead=&a;
plast=phead;
}
else if(plast==phead)/*If plast point to phead,than there is only one symbol in the list(up to now).*/
{
plast=&a;
phead->next=plast;
plast->next=NULL;
}
else
{
plast->next=&a;
plast=plast->next;
plast->next=NULL;
}}
Il n'est pas obligatoire que la valeur NULL soit invalide. –
Qu'est-ce que 'plast'? Qu'est-ce que «phead»? Comment et où sont-ils initialisés? Pouvez-vous s'il vous plaît essayer de créer un [Exemple minimal, complet et vérifiable] (http://stackoverflow.com/help/mcve) et nous montrer? –
Comment puis-je vérifier cela? Pardon. – user3790620