Ich bin relativ neu in C
und ich habe ein Problem mit dem folgenden:Regexc - Segmentation Fault
regex_t re;
regmatch_t matches[2];
int start;
int end;
int count = 0;
int reti = regcomp(&re, "^(?:[a-zA-Z]|[a-zA-Z](?:[a-zA-Z0-9\\-])*[a-zA-Z0-9])(?:\\.(?:[a-zA-Z]|[a-zA-Z](?:[a-zA-Z0-9\\-])*[a-zA-Z0-9]))*$", REG_EXTENDED);
while (1) {
printf("Local = %s\n", local);
reti = regexec(&re, local, 2, matches, 0);
// More code here
}
Als ich das laufen, erhalte ich eine segmentation fault
.
local
wurde als char *local
definiert und wird korrekt ausgedruckt.
lief ich den Code mit GDB
und es stellt sich heraus, das Problem bei der Leitung entstehen:
reti = regexec(&re, local, 2, matches, 0);
Ich kann nicht, warum scheinen, um herauszufinden.
Dies ist die Ausgabe von gdb
:
Program received signal SIGSEGV, Segmentation fault.
0x00007ffff7af8d42 in regexec() from /lib/x86_64-linux-gnu/libc.so.6
(gdb) backtrace
#0 0x00007ffff7af8d42 in regexec() from /lib/x86_64-linux-gnu/libc.so.6
#1 0x000000000040092d in email_in (str=0x400aa8 "[email protected]") attestdriver.c:70
#2 0x0000000000400780 in main() at testdriver.c:15
Würde jemand eine Idee, was das Problem sein könnte?
Danke für Ihre Hilfe.
Können Sie uns die Definition von 'regcomp()' und 'regexec()' zeigen? –
@sunqingyao https://github.com/lattera/glibc/blob/master/posix/regcomp.c#L465-L519 – Siguza
Haben Sie Ihren 'reti' Rückgabewert überprüft, um zu sehen, dass' regcomp' tatsächlich eine erfolgreiche Kompilierung zurückgibt? – Dolda2000