Ho problemi a capire dove e perché sto ricevendo un errore di segmentazione.Errore di segmentazione quando si utilizza regexec/strtok_r in C
Sto scrivendo un codice C che richiede all'utente di inserire un'espressione regolare e compilare e poi inserire una stringa con più frasi:
int main(void){
char RegExp[50];
regex_t CompiledRegExp;
char *para;
char delim[] = ".!?,";
char *sentence;
char *ptr1;
printf("Enter regular expression: ");
fgets(RegExp, 50, stdin);
if (regcomp(&CompiledRegExp,RegExp,REG_EXTENDED|REG_NOSUB) != 0) {
printf("ERROR: Something wrong in the regular expression\n");
exit(EXIT_FAILURE);
}
printf("\nEnter string: ");
strtok_r viene utilizzata per dividere la stringa con uno dei due seguendo i delimitatori.,?! e poi la risultante del token (frase) viene utilizzato come parametro stringa nella funzione regexec che cerca per vedere se l'espressione regolare compilata in precedenza è contenuto all'interno del token:
if(fgets(para, 1000, stdin)){
char *ptr = para;
sentence = strtok_r(ptr, delim, &ptr1);
while(sentence != NULL){
printf("\n%s", sentence);
if (regexec(&CompiledRegExp,sentence,(size_t)0,NULL,0) == 0) {
printf("\nYes");
} else {
printf("\nNo");
}
ptr = ptr1;
sentence = strtok_r(ptr, delim, &ptr1);
}
}
regfree(&CompiledRegExp);
}
E 'probabilmente un errore stupido Sono fare in modo che qualsiasi aiuto nel localizzare le ragioni del Segfaul sarebbe molto apprezzato!
EDIT:Spostato regfree
in un luogo più adatto. Tuttavia, il segfault si sta ancora verificando. Sono abbastanza sicuro che abbia qualcosa a che fare sia con come viene letta l'espressione regolare sia come viene confrontato in regexec
. Incerto, però.
E il debugger? –
Compilare il programma per il debug ed eseguire il programma con un debugger. Il debugger ti dirà esattamente cosa è successo. – wallyk
Il debugger gdb non mi fornisce alcuna specifica - afferma solo che è stato trovato un segfault – higz555