内存不足?

时间:2014-05-16 15:22:52

标签: qt memory memory-management

我正在处理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;
}

1 个答案:

答案 0 :(得分:1)

-1073741571==0xc00000fd

和c00000fd是stack overflow的错误代码。

将这些大型数组静态保存在最终堆栈上是有问题的,将它分配到堆上并且你会好得多:

QVector<uInt32>          ddata;

main12bitSampling::main12bitSampling(QWidget *parent = 0)
    QMainWindow(parent), ddata(1024*1048)
{
    //...
}