c - 递归调用的 C 函数因 strtol_l_internal SIGSEGV 而失败
问题描述
我正在编写一些用 C 编写的非常古老的代码(90 年代初)。2012 年移植到 Linux。一个程序使用递归从端口读取数据并将读取的数据组装到存储在全局存储中的缓冲区中。它定义为:
char R_buffer[51000];
将数据加载到此缓冲区的函数执行标准的 linux 读取系统,以将 N 字节数据(最大 BUFSIZ)读取到分配的缓冲区中。然后逐字节移动到上面的 R_buffer 中。
正在使用的协议在正在读取的数据流中具有消息序列的开始和序列的结束。
遇到的问题是递归函数的返回在 strto_l_internal 中的信号 11 (SIGSEGV) 上失败,正如所产生的回溯所报告的那样。
调用从函数分配返回值的函数如下:
inbyte = getnewchar(timeout_val);
Inbyte 被定义为一个字符。getnewchar 返回一个 char,它是 buf 中的 malloced 值之一。
请注意,读取使用 SIGALRM 计时器来检查是否有阻塞的数据传入。这个警报会以某种方式弄乱返回的数据吗?
谢谢。
解决方案
推荐阅读
- azure - Automate the start/stop VMs during off-hours in Azure using terraform
- kubernetes - GKE's cluster autoscaler got stucked in initializing status
- modal-dialog - Office Fluent UI / Fabric UI Modal - how can I control where it appears?
- reactjs - Material UI自动完成上的Typescript Equality问题
- azure - 为 Form Recognizer 2.0 添加 Azure Logic App 步骤存在内置连接问题
- microsoft-graph-api - Graph API 不允许在线会议
- sql - 使用 TO_NUMBER 解析固定计数法和科学计数法的数字
- react-native - react native jest mock api调用自定义模块
- javascript - 为什么开发者控制台对相同的数据输入给出不同的结果?
- python - 输出 .csv 文件仅写入最后一个查询。如何让它打印所有 url 检查?