概述
我们知道在使用一个类的指针时,应先在头文件中声明,在构造函数中初始化或者new出来,一定不能不初始化,否则会出现内存错误。在析构函数中还应该把该指针delete掉,并且让其为NULL。
if(p != NULL)
{
delete p;
p = NULL;
}
然而我的项目在想用QCumstomPlot画圆时,使用了QCumstomPlot的QCPCurve类。主要代码如下:
声明:
QCPCurve *rotaryErrCurve;
创建:
rotaryErrCurve = new QCPCurve(ui->rotaryErrWidget->xAxis, ui->rotaryErrWidget->yAxis);
其他设置以及使用就不多赘述。在析构函数中:
if(rotaryErrCurve != NULL){
delete rotaryErrCurve;
rotaryErrCurve = NULL;
}
将这些部分添加到我原有工程里之后,老是出现错误:
C:Program Files (x86)SogouInputComponentsError - RtlWerpReportException failed with status code :-1073741823. Will try to launch the process directly
程序异常结束。
G:luoyong51daqbuild-51daq-Desktop_Qt_5_6_3_MinGW_32bit-Releaserelease51daq.exe crashed.
我们知道这就是访问不存在或者不正确的地址造成的。在已知其他部分功能正常的情况下,复返检查新加部分也没有发现错误。直至在打开QCusomPlot的HELP文件,看到QCPCurve的构造函数的说明部分如下:
QCPCurve::QCPCurve (QCPAxis * keyAxis,explicit QCPAxis * valueAxis )
Constructs a curve which uses keyAxis as its key axis ("x") and valueAxis as its value axis ("y").
keyAxis and valueAxis must reside in the same QCustomPlot instance and not have the same orientation.
If either of these restrictions is violated, a corresponding message is printed to the debug output (qDebug), the construction is not aborted, though.
The created QCPCurve is automatically registered with the QCustomPlot instance inferred from keyAxis.
This QCustomPlot instance takes ownership of the QCPCurve, so do not delete it manually but use QCustomPlot::removePlottable() instead.
前面部分都挺正常的,看到最后一句话我坐不住了。。。
do not delete it manually but use QCustomPlot::removePlottable() instead.
然后我把delete部分改为:
if(rotaryErrCurve != NULL)
{
ui->rotaryErrWidget->removePlottable(0);
rotaryErrCurve = NULL;
}
就好了。。。。
教训:
在使用一个不熟悉的类时要仔细阅读它的说明文档,不要想当然。
最后
以上就是单薄手链为你收集整理的QCustomPlot使用过程中出现的错误的全部内容,希望文章能够帮你解决QCustomPlot使用过程中出现的错误所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复