三、指针对象没有实例化就进行引用
如:
关于qt程序异常退出
Dialog *d;
d = new Dialog;
d->show();
如果忘了第二行的实例化,也会导致Qt程序异常终止
********************************************************************************************
第一版视频采集::程序不够健壮,遇到错误就中断了(接口需要自己定义,我是先发一个pic 然后服务器先发大小,后发送照片数据(1秒获取一次图片))
QThread::usleep(1000);
int ret;
char response[20] = {0}; //创建一个缓存区
memset(response,0,sizeof(response)); //清零
char pic []= "pic";
unsigned int piclen;
qDebug() << "请求图片发送pic";
ret=Tcpsocketpic->write(pic,strlen(pic)); //发送pic 请求照片大小
qDebug()<<"发送pic给ret的返回值="<<ret;
qDebug() << "请求完毕";
Tcpsocketpic->flush(); //发完之后刷新socket
QThread::usleep(1000);
ret = Tcpsocketpic->read(response,5); //读照片大小 ret 为5 , 读入response为五位数大小
qDebug()<<"读照片大小的ret="<<ret;
if(ret != (int)strlen(response) )
{
qDebug() << "图片大小接收失败";
timer->stop(); //定义timer函数
Tcpsocketpic->close();
//goto loop;
}
qDebug() << "response: " << response;
piclen = atoi(response); //接受到图片大小
Tcpsocketpic->flush();
char *picbuf = new char[piclen + 1]; //接收图片是创建图片大小的缓存区
QThread::usleep(1000);
ret = Tcpsocketpic->read(picbuf,piclen);
if(ret<0)
{
qDebug() << "recv pic failed" << ret;
ui->label_picture->clear();
Tcpsocketpic->close();
}
QPixmap pixmap; //关于程序异常退出,没有初始化pixmap
pixmap.loadFromData((const uchar *)picbuf, piclen, "JPEG"); //就在这两行出现错误
ui->label_picture->setPixmap(pixmap);
Tcpsocketpic->flush();
delete[] picbuf;