DSP开发中遇到的问题 - 类指针未初始化后果
来源:互联网 发布:北津学院教务网络系统 编辑:程序博客网 时间:2024/05/18 00:13
收到RECEIVE_REQ_MSG消息时会执行下面的代码,这里因为某种原因m_receiverSlaverController的值仍为NULL,并没有指向具体的CReceiverSlaverController类。执行到ReceiveHandler函数时,在ReceiveHandler函数中,会通过CReceiverSlaverController类的成员变量m_measurementAgent(类型为Agent类)调用Agent类的成员函数handleMessage,然后在ReceiveHandler函数中发生了访问非法内存0xE8A4的异常。
这是因为:在执行m_receiverSlaverController->ReceiveHandler时,虽然m_receiverSlaverController指针的值为NULL,但由于类的成员函数是所有类对象的共享代码,所以通过空指针m_receiverSlaverController是可以调用ReceiveHandler函数的(经查看汇编代码,调用该函数时,地址是写死的),但在执行到ReceiveHandler内部的代码时出现了问题,这是因为在ReceiveHandler函数中,获取类CReceiverSlaverController的成员变量m_measurementAgent地址的办法是从m_receiverSlaverController处(实际上就是类第一个成员变量m_srioInterface所在地址处)偏移0xE8A4得到,因为m_receiverSlaverController为空,所以计算得到的m_measurementAgent地址就是0xE8A4,所以从地址0xE8A4处读取m_measurementAgent的值会出问题,这涉及了读取非法内存0xE8A4的操作,所以TI DSP CPU的L1D内存控制器会检测到该非法访问,并通过EXCEPTION机制上报该错误。
case RECEIVE_REQ_MSG:
{
m_receiverSlaverController->ReceiveHandler(&messagePointer);
//m_receiverSlaverController为类CReceiverSlaverController指针
break;
}
... ....
void CReceiverSlaverController::ReceiveHandler(void** ninja_message)
{
m_measurementAgent->handleMessage(ninja_message);
}
类CReceiverSlaverController:
class CPuschReceiverSlaverController
{
public:
......................
void ReceiveHandler(void** ninja_message);
......................
private:
void *m_srioInterface;
......................
Agent *m_measurementAgent; //该成员变量相对于类第一个成员变量m_srioInterface的偏移为0xE8A4. Agent为类的类型.
......................
}
非法内存读的上报log:
FATAL EXCEPTION Nid:0x1271 TYPE:EXTERNAL:[0xEA07A]CpuL1DMemoryProtectionFault Violated memory address(L1DMPFAR):0x0000E8A4Local access type:supervisor read **
021817 17.06 17:47:03.421 [192.168.255.1] ** FATAL APPLICATION ERROR Nid:0x1271 Total count of exceptions INT:0 EXT:1 OTHER:0 Current program address(NRP):0x820F4024 (该地址是进入EXCEPTION代码之前保存的返回地址,该地址就是handleMessage函数某条指令的地址)**
- DSP开发中遇到的问题 - 类指针未初始化后果
- 指针未初始化问题
- DSP程序中遇到的一个问题
- 未初始化的指针
- Android EditView 开发中遇到的问题(未完善)
- float 类型变量未初始化带来的后果
- 今天开发中遇到的一个关于初始化赋值问题
- 指针未初始化引发的程序奔溃问题
- 定义的指针一定要记得初始化,否则后果不堪设想。。。
- c++中未初始化的指针不等于NULL
- dsp调试中数据类型自动转换遇到的问题
- DSP学习中遇到的问题(By Moli)
- 类的初始化中遇到的一个问题
- Android 项目开发(Eclipse mac)中遇到"Unsupported major.minor version 52.0"的问题(未解决)
- java的初始化研究:android开发中遇到的一个奇怪问题
- 字符数组中关于strlen的问题(未初始化)
- 在自定义类中使用CView指针遇到的问题
- OPEN CL开发FPGA遇到LINK2019的问题,未解决
- java基于线程的分布式
- java jvm 垃圾收集算法
- poj 2109 Power of Cryptography
- 黑马程序员---Qt QTableWidget 2
- POJ 1742 - Coins (dp 多重背包)
- DSP开发中遇到的问题 - 类指针未初始化后果
- C++ 对象模型 学习笔记(1)
- Adobe RIA 开发工程师认证考试大纲
- min2440 uart中断模式(非fifo模式)
- C++ insertion sort(插入排序)
- top命令详解
- A*算法详细讲解(转)
- copyWithZone 对象的自定义拷贝 (深and浅)
- Mongodb在Ubuntu下的安装