我正在处理NI DAQmx,他们将 unsigned long 定义为 uInt32 。我在头文件中声明uInt32数组[1048 * 1024]并编译,但是当我尝试运行它时,它似乎冻结了,当我停止它时,它会退出并出现错误:
The program has unexpectedly finished.
D:\Projects\build-BlackAndWhite12bit-Desktop_Qt_5_1_1_MinGW_32bit-Debug\debug\BlackAndWhite12bit.exe exited with code -1073741571
嗯,它没有说没有足够的内存,但是因为我分配4 * 1048 * 1024 = 4,292,608字节,我的版本是Qt Creator 2.8.1基于Qt 5.1.1(MSVC 2010,32位) )在Win7 x64上,我希望它没有足够的内存。
我发现了一个类似的问题Qt Creator - calloc fails with large memory,但唯一对我有用的解决方案可能会转移到64位。但是我该怎么做?我尝试使用Qt 5.2.1 for Windows 64-bit (VS 2012, 556 MB)链接从此网站下载该应用程序。但是当我得到它时,它似乎是一个配置为64位的32位版本。这是我需要的吗?我需要OpenGL吗?
有没有办法为我目前的Qt版本提供更多内存? 还有其他方法可以解决我的问题吗?
这里是.h内容:
#ifndef MAIN12BITSAMPLING_H
#define MAIN12BITSAMPLING_H
#include <QMainWindow>
#include "nivision.h"
#include "nivis.h"
#include "NIDAQmx.h"
namespace Ui {
class main12bitSampling;
}
class main12bitSampling : public QMainWindow
{
Q_OBJECT
public:
explicit main12bitSampling(QWidget *parent = 0);
~main12bitSampling();
...
uInt32 ddata[1073152];
...
signals:
private slots:
private:
Ui::main12bitSampling *ui;
};
#endif // MAIN12BITSAMPLING_H
这是main.c:
#include "main12bitsampling.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
main12bitSampling w;
w.show();
return a.exec();
}
这里是main12bitsampling.cpp:
main12bitSampling::main12bitSampling(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::main12bitSampling)
{
ui->setupUi(this);
mainLoop();
}
main12bitSampling::~main12bitSampling()
{
delete ui;
}
答案 0 :(得分:1)
-1073741571==0xc00000fd
和c00000fd是stack overflow的错误代码。
将这些大型数组静态保存在最终堆栈上是有问题的,将它分配到堆上并且你会好得多:
QVector<uInt32> ddata;
main12bitSampling::main12bitSampling(QWidget *parent = 0)
QMainWindow(parent), ddata(1024*1048)
{
//...
}