c++ 异常崩溃记录1

昨天我在处理视频流转码问题,突然发现一个正常运行的代码出问题了

class LocalRecordingClient
{
    
public:
    LocalRecordingClient(UINT32 uDST,UINT32 uCameraId);
    ~LocalRecordingClient();
    ...
 
    bool IsRuning(){AutoLinuxLock lock(&m_lockRun); return m_bRun;};  //gdb 调试崩溃到这里
    void setRuning(bool bRun){AutoLinuxLock lock(&m_lockRun); m_bRun = bRun;};

    ...
private:
    bool        m_bRun;
    pthread_t m_pthread;
    LinuxLock m_lockRun;
    
    ...
    
    u_int8_t videoData[500*1024];
};

调用线程锁崩溃了,我首先想到的是锁的父类指针被释放了,但是经过查看代码发现父类指针没有被释放

那么只有可能是莫名其妙的原因造成了野指针,经测试发现全局只有这个类有问题其它代码都正常,而且和视频数据有关系

视频数据转码数据错误时才会触发这个崩溃,这个时候我就想到了可能跟这个代码有关系

u_int8_t videoData[500*1024];

这个内存太大了,可能异常情况会影响这个类的内存,我就尝试着把它换成指针,但还是成员变量,发现又崩溃到了另一个地方,感觉这样修改有效果但是还是存在问题,然后我就在调用它的地方创建下,用完释放问题就解决了

这个是子线程中调用的,而且会一路摄像头开启一个

       uint8_t* videoData = (uint8_t*)malloc(500*1024);
        memset(videoData,0,500*1024);
        while (this->IsRuning()) {

             ...
        }
        free(videoData);

问题虽然解决了,而且确实觉得之前的方式有问题(只是经验加直觉),但是却不是很明白到底为啥,有知道问题的欢迎讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值