Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jquery-ui/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 运行正常时调用了QT调试错误r6010中止_C++_Qt_Abort_Qwt - Fatal编程技术网

C++ 运行正常时调用了QT调试错误r6010中止

C++ 运行正常时调用了QT调试错误r6010中止,c++,qt,abort,qwt,C++,Qt,Abort,Qwt,我正在尝试使用文件生成QWT光谱图。有500个二进制文件可以在UI中使用滑块显示周年纪念。该程序工作正常,但有时会出现“调试错误r6010中止已调用”错误,并在任何随机情况下崩溃。我不知道为什么会出现这种情况,因为它是随机的,但它取决于滑块移动时fnum的变化,而不是在任何固定值或时间(在静止状态下不会出现)。下面是我的程序代码 setAlpha随UI滑块的更改而更改 void Plot::setAlpha( int alpha ) { fnum=alpha; d_spectro

我正在尝试使用文件生成QWT光谱图。有500个二进制文件可以在UI中使用滑块显示周年纪念。该程序工作正常,但有时会出现“调试错误r6010中止已调用”错误,并在任何随机情况下崩溃。我不知道为什么会出现这种情况,因为它是随机的,但它取决于滑块移动时fnum的变化,而不是在任何固定值或时间(在静止状态下不会出现)。下面是我的程序代码

setAlpha随UI滑块的更改而更改

void Plot::setAlpha( int alpha )
{
    fnum=alpha;
    d_spectrogram->setData( new mydata(fnum,dial) );
    d_spectrogram->attach( this );
    replot();
}

class mydata: public QwtRasterData
{
    typedef signed short int sBYTE;
    char filepath[35]; 
    sBYTE *fileBuf;    
    FILE *file = NULL; 
public:

    mydata(int fnum, int dial)
    {
        setInterval( Qt::XAxis, QwtInterval( 0, (area)-1 ) );
        setInterval( Qt::YAxis, QwtInterval( 0, (area)-1 ) );
        setInterval( Qt::ZAxis, QwtInterval( -dial, dial ) );

        {
            sprintf_s(filepath, "c:/mydata/uwpi%d.bin", fnum);
            fopen_s(&file,filepath, "rb");
            long fileSize = getFileSizex(file);
            fileBuf = new sBYTE[fileSize];
            fread(fileBuf, fileSize, 1, file);
            fclose(file);
        }
    }

    virtual double value( double x, double y ) const
    {

        int x_pos = static_cast<int>(x);
        int y_pos = static_cast<int>(y);
        const double c =  (fileBuf[ ((x_pos)+((area-y_pos)*area))]);
        return c;
    }
}
void Plot::setAlpha(int-alpha)
{
fnum=α;
d_谱图->设置数据(新mydata(fnum,拨号));
d_谱图->附加(此);
replot();
}
mydata类:公共QwtRasterData
{
typedef签名短整数字节;
char文件路径[35];
sBYTE*fileBuf;
FILE*FILE=NULL;
公众:
mydata(整数fnum,整数拨号)
{
设定间期(Qt::XAxis,QwtInterval(0,(面积)-1));
设定间期(Qt::YAxis,QwtInterval(0,(面积)-1));
设置间隔(Qt::ZAxis,QwtInterval(-dial,dial));
{
sprintf_s(文件路径,“c:/mydata/uwpi%d.bin”,fnum);
fopen_s(&file,filepath,“rb”);
long fileSize=getFileSizex(文件);
fileBuf=新的sBYTE[fileSize];
fread(fileBuf,fileSize,1,file);
fclose(文件);
}
}
虚拟双值(双x,双y)常量
{
int x_pos=静态铸件(x);
int y_pos=静态铸造(y);
常数双c=(fileBuf[(x_pos)+(area-y_pos)*area));
返回c;
}
}

使用QFile、Qdata和QVector求解

谢谢你的回复,它现在起作用了

QFile myfile;
myfile.setFileName(“c:/file.bin”);
if(!myfile.open(QIODevice::ReadOnly)) return;
QDataStream data(&myfile);
data.setByteOrder(QDataStream::LittleEndian);
QVector<qint16> result;
while(!data.atEnd()) { qint16 x; data >> x; result.append(x);
} 
QFile-myfile;
myfile.setFileName(“c:/file.bin”);
如果(!myfile.open(QIODevice::ReadOnly))返回;
QDataStream数据(&myfile);
setByteOrder(QDataStream::LittleEndian);
矢量结果;
而(!data.atEnd()){qint16 x;data>>x;result.append(x);
} 

该程序工作正常,但有时会出现“…中止已被称为”错误并崩溃
。那么程序就不好了。您访问fileBuf时没有检查
((x_pos)+((area-y_pos)*area))
是否为有效索引。这并不意味着在我将滑块移动到末尾时它会显示所有帧,但有时会以随机方式出现abort()错误。以前未正确加载文件时显示ftell错误。@user3871970此文件很大吗?这台计算机上有多少内存?4Gb内存和文件各529kb