gpt4 book ai didi

c - 内存集和 SIGSEGV

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

我在一段代码中遇到了一个奇怪的问题。

void app_ErrDesc(char *ps_logbuf, char *pc_buf_err_recno)
{
char *pc_logbuf_in;
char rec_num[10];
char *y = "|";
int i, j;

memset(rec_num, 0, sizeof(rec_num));
memset(pc_buf_err_recno, 0, LOGBUFF);
.....
.....
}

由于某种原因,第一个 memset 调用发送了一个 SIGSEGV。更奇怪的是当在 gdb 中,尽管调用了该函数,但同一行执行了大约 30 次只有一次,里面没有循环!这是一段 gdb session 。

7295            /*Point to logbuffer string*/
(gdb)
7292 memset(rec_num, 0, sizeof(rec_num));
(gdb)
7295 /*Point to logbuffer string*/
(gdb)
7292 memset(rec_num, 0, sizeof(rec_num));
(gdb) n
7295 /*Point to logbuffer string*/
(gdb)
7292 memset(rec_num, 0, sizeof(rec_num));
(gdb)

程序接收到信号 SIGSEGV,段错误。

我也尝试过通过 valgrind 的 memcheck 工具运行该程序,但没有得到关于上述代码的任何重要信息。

我正在解析的文件只有一条记录。

感谢任何指点。谢谢。

最佳答案

这很可能是第二个 memset,原因是调用外部函数时缓冲区大小不足。调试器可能会错误地显示您所在的位置。尝试在每个步骤后添加日志记录,以找出究竟是什么崩溃了。

关于c - 内存集和 SIGSEGV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/560155/

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