c - 使用 printf 时的段错误

我正在调试浮点异常的信号处理程序中的一些 Linux C 代码。目标是检查浮点寄存器,打印一些信息,然后中止。尝试 printf 的结果时出现分段错误(char)('0' + phyreg)。

struct ucontext * uc = (struct ucontext *) data;

fpregset_t fp = uc -> uc_mcontext.fpregs;

int top = (fp -> sw >> 11) & 0x07;

int i,j,k;

for (i = 0; i < 8; i++) {

static const char * tags [] = {

"valid", "zero", "invalid/infin", "empty"

};

int phyreg = (top + i) & 0x07;

struct _libc_fpreg* r = &(fp -> _st [phyreg]);

const char* regExp = (((r->exponent & 0x8000) != 0) ? "-" : "+");

printf (" FP %s: Mantissa= %s",

(char) ('0' + phyreg), // reg stack (SIGSEGV here)

regExp); // register exponent sign

j = (r->significand[3] >> 15) & 0x01;

printf ("%s.",(char) ('0' + j)); // mantissa (Also SIGSEGV here when

// previous SIGSEGV is commented out)

...

}

这不是(char)('0' + phyreg)问题的计算,因为当我将它移到单独的行并将结果存储在临时变量中时,直到 printf 尝试显示临时变量时我才得到段错误。那么,导致段错误的错误在哪里?

Copyright © 2088 02年世界杯中国队_1930年乌拉圭世界杯 - n360l.com All Rights Reserved.
友情链接