首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >memset和SIGSEGV

memset和SIGSEGV
EN

Stack Overflow用户
提问于 2009-02-18 07:27:03
回答 4查看 3.5K关注 0票数 1

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

代码语言:javascript
复制
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会话。

代码语言:javascript
复制
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工具运行该程序,但没有得到关于上述代码的任何重要信息。

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

感谢任何人的指点。谢谢。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-02-18 07:56:30

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

票数 2
EN

Stack Overflow用户

发布于 2009-02-18 07:52:22

我怀疑是对函数的调用,所以要确保调用不是像这样

代码语言:javascript
复制
char pc_buf_err_recno[SMALLER_THAN_LOGBUFF];
char ps_logbuf[TOO_SMALL]
app_ErrDesc(ps_logbuf, pc_buf_err_recno);
票数 1
EN

Stack Overflow用户

发布于 2009-02-18 08:03:46

调试器可能是不正确的,特别是当你得到SEGV的时候。记住,当你得到一个分段错误时,你很有可能已经破坏了堆栈,如果发生这种情况,调试器将会感到困惑。

也很可能是调用函数弄乱了,而不是当前的那个。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/560155

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档