我正在研究一段在c中使用正则表达式的代码。
所有正则表达式的东西都使用标准的正则表达式 c 库。
在 regexec.c 的第 246 行,该行是
__libc_lock_lock(dfa->lock);
我的程序在这里出现段错误,我不知道为什么。我试图找到 __libc_lock_lock 的定义位置,结果发现它是 bits/libc-lock.h 中的一个宏。然而,宏实际上并没有被定义为任何东西,只是被定义了。
两个问题:
1)调用 __libc_lock_lock 时运行的代码在哪里(我知道它必须替换为某些东西,但我不知道那会在哪里。
2) 如果 dfa 是一个 re_dfa_t 对象,它是从作为 regex_t 对象类型的缓冲区成员的 ac 字符串转换而来的,它不会有任何成员锁。这是应该发生的事情吗。
这个 __libc_lock_lock 真的好像有某种魔法在这里发生