gpt4 book ai didi

c - __libc_lock_lock 是段错误

转载 作者:太空宇宙 更新时间:2023-11-04 07:43:06 25 4
gpt4 key购买 nike

我正在编写一段在 c 语言中使用正则表达式的代码。

所有正则表达式的东西都使用标准的正则表达式 c 库。

在regexec.c的第246行,该行是

__libc_lock_lock(dfa->lock);

我的程序在这里出现段错误,我不知道为什么。我试图找到 __libc_lock_lock 的定义位置,结果发现它是 bits/libc-lock.h 中的一个宏。然而,这个宏实际上并没有被定义为任何东西,只是被定义了。

两个问题:

1)调用__libc_lock_lock时运行的代码在哪里(我知道一定是 替换为某些东西,但我不知道那会在哪里。

2) 如果 dfa 是从作为 regex_t 对象类型的缓冲区成员的 c 字符串转换而来的 re_dfa_t 对象,它将没有任何成员锁。这是应该发生的事情吗。

这个 __libc_lock_lock 真的好像有某种魔法在这里发生一样

最佳答案

如果 段错误在 libc 中 那么您可以 99.9% 确定以下内容:

  1. 你的 API 有问题
  2. 您在之前的某个时间点破坏或破坏了 libc 使用的内存,这是延迟效应。 (谢谢泰勒!)
  3. 您正在做一些插入 API 功能的事情
  4. 您是一名开发人员,正在使用 API 实现中的新更改测试当前主干

我怀疑第一个是原因。发布您的 API 使用情况和您的库版本可能会有所帮助。 libc 中的 Regexp API 非常稳定。

使用 gdb 查找调试以找到导致段错误的执行路径的堆栈跟踪,并为符号安装 glibc-devel 包。如果段错误在 libc 之内(或之外)......那么你做了一些坏事(例如没有初始化不透明指针)

[aiden@devbox ~]$ gdb ./myProgram
(gdb) r
... Loads of stuff, segfault info ..
(gdb) bt

将打印导致 segault 的堆栈和函数名称。使用“-g”调试标志编译您的源代码以保留重要的调试信息。

获取 API 用法/示例的权威来源!

祝你好运

关于c - __libc_lock_lock 是段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1050262/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com