我正在使用Valgrind测试我的应用程序,但我不明白为什么它会在这里的未识别指令上抛出错误:
unsigned char *temp=SearchStartPtr;
unsigned char *NrStartPos=NULL;
unsigned char *Param=(unsigned char*)ParamName; //this is originally *char with "PAR#" inside
if(0==memcmp(temp,Param,4))
{
NrStartPos=temp;
break;
}
Valgrind会抛出这个错误并退出我的应用程序。
disInstr(arm): unhandled instruction: 0xF1010200
cond=15(0xF) 27:20=16(0x10) 4:4=0 3:0=0(0x0)
==7679== valgrind: Unrecognised instruction at address 0x4843588.
==7679== at 0x4843588: ??? (in /usr/lib/arm-linux-gnueabihf/libcofi_rpi.so)
Your program just tried to execute an instruction that Valgrind
==7679== did not recognise. There are two possible reasons for this.
==7679== 1. Your program has a bug and erroneously jumped to a non-code
==7679== location. If you are running Memcheck and you just saw a
==7679== warning about a bad jump, it's probably your program's fault.
==7679== 2. The instruction is legitimate but Valgrind doesn't handle it,
==7679== i.e. it's Valgrind's fault. If you think this is the case or
==7679== you are not sure, please let us know and we'll try to fix it.
==7679== Either way, Valgrind will now raise a SIGILL signal which will
==7679== probably kill your program.
==7679==
==7679== Process terminating with default action of signal 4 (SIGILL)
==7679== Illegal opcode at address 0x4843588
==7679== at 0x4843588: ??? (in /usr/lib/arm-linux-gnueabihf/libcofi_rpi.so)
通常情况下,代码可以正常工作(但我不知道它是否存在一些内存泄漏)。
我确定问题出在memcmp指令上,但我不明白哪里出了问题。
在代码的早期,我有另一个指令也是做同样的事情,但在检查之前我可以将其注释掉:
memcmp(ReadPtr,ToWritePtr,sizeof(struct termios)
memcmp
是一个函数而不是指令。此外,Valgrind指出这个非法指令是在/usr/lib/arm-linux-gnueabihf/libcofi_rpi.so
中发现的,这几乎不可能是您创建的文件。 - Some programmer dude