在Qt中创建循环缓冲区的最佳方法是什么? 我会做这样的事情:
vidoudpsocket.h
typedef struct
{
CircularBuffer *before
quint16 *data;
CircularBuffer *next;
} CircularBuffer;
videoudpsocket.cpp
VideoUDPSocket::VideoUDPSocket(QObject *parent)
: QObject(parent)
{
CircularBuffer buffer0, buffer1, buffer2, buffer3, buffer4, buffer5, buffer6, buffer7;
buffer0.before = buffer7;
buffer0.data = (quint16 *) malloc(16384*16384);
buffer0.next = buffer1;
//...
}
这是在Qt中实现它的好方法还是更好?
谢谢!
我的第一次尝试似乎不起作用,编译器不知道如何处理结构中的CircularBuffer
。
我现在尝试使用QVector,但我得到Error allocating memory for data[i]
- 调试消息(在i> 7809)。
#define MAXNUMBERRANGEBINS 8192
QVector<quint8**> ringBuffer;
ringBuffer.resize(8);
foreach(quint8** data, ringBuffer)
{
data = (quint8**) malloc(MAXNUMBERRANGEBINS*2*sizeof( quint8* ));
if(data == NULL)
qDebug() << "Error allocating memory for data";
for(int i = 0; i < MAXNUMBERRANGEBINS*2; i++)
{
data[i] = (quint8*) malloc(MAXNUMBERRANGEBINS*2);
if(data[i] == NULL)
qDebug() << "Error allocating memory for data[" << i << "]";
}
}
Edit2 如果我计算得正确,我的数组每个缓冲区大约270MB,这应该解释内存分配错误,我是对的吗?
答案 0 :(得分:0)
不要使用自制链表。 直接访问更容易理解,也更容易调试。
//while (num = 0) {
while (num == 0) {
scanf("%d\n", &num);
if (num < 0)
printf("<-Error: Please enter positive numbers!->\n");
}