我在一段代码中遇到了一个奇怪的问题。
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 会话。
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 工具运行该程序,但对上述代码没有任何意义。
我正在解析的文件只有一条记录。
任何指针表示赞赏。谢谢。