Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/63.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++ 如何通过malloc为队列数组分配内存?_C++_C_Memory_Queue_Malloc - Fatal编程技术网

C++ 如何通过malloc为队列数组分配内存?

C++ 如何通过malloc为队列数组分配内存?,c++,c,memory,queue,malloc,C++,C,Memory,Queue,Malloc,我尝试使用malloc函数为空队列数组分配动态内存,如代码所示。但是,(*pq).size()的输出不正确-128,调用(*pq).push()将导致错误。我哪里出错了?如何正确分配内存 #include <stdio.h> #include <stdlib.h> #include <queue> typedef std::queue<int> iq; iq *pq; int main() { pq = (iq *) malloc(1

我尝试使用malloc函数为空队列数组分配动态内存,如代码所示。但是,
(*pq).size()
的输出不正确-128,调用
(*pq).push()
将导致错误。我哪里出错了?如何正确分配内存

#include <stdio.h>
#include <stdlib.h>
#include <queue>

typedef std::queue<int> iq;

iq *pq;

int main() {
    pq = (iq *) malloc(16 * sizeof(iq));
    printf("%d\n", (*pq).size());
    printf("%d\n", (*pq).empty());
//    (*pq).push(12);
    (*pq).pop();
    printf("%d\n", (*pq).size());
    free(pq);
    return 0;
}
#包括
#包括
#包括
typedef std::队列iq;
智商*pq;
int main(){
pq=(iq*)malloc(16*sizeof(iq));
printf(“%d\n”,(*pq.size());
printf(“%d\n”,(*pq.empty());
//(*pq)。推(12);
(*pq.pop();
printf(“%d\n”,(*pq.size());
免费(pq);
返回0;
}

不清楚您的解决方案是否需要
malloc
。本机C++解决方案避免了大多数可读语义问题。见下文

在下面的代码中,我切换到使用
iostream
vector
,因为它使您可以在相同的抽象级别上对所有事情进行推理
Malloc
是用于分配动态内存的低级C例程。您已经在使用
std::queue
,因此当
向量
可以正常工作时,混合使用
malloc
是没有意义的

解决方案 如何通过malloc为队列数组分配内存

就像你在例子中做的那样。从技术上讲,这不是分配错误。尽管如此,请参见†

我哪里出错了

您只为队列分配了一些内存。您从未将任何队列对象构造到该内存块中。动态对象是使用新表达式构造的。要将对象构造到由
malloc
分配的内存块中,可以使用新语法

如何正确分配内存

#include <stdio.h>
#include <stdlib.h>
#include <queue>

typedef std::queue<int> iq;

iq *pq;

int main() {
    pq = (iq *) malloc(16 * sizeof(iq));
    printf("%d\n", (*pq).size());
    printf("%d\n", (*pq).empty());
//    (*pq).push(12);
    (*pq).pop();
    printf("%d\n", (*pq).size());
    free(pq);
    return 0;
}
不使用
malloc

<>在C++中没有充分的理由使用<代码> MALLC/<代码> >

以下是为16个队列的数组分配动态内存以及构造这些队列的正确方法:

std::vector<std::queue<int> > pq(16);
std::向量pq(16);

向量将解决许多问题,否则你会自食其果。它将负责构造和销毁元素,避免内存泄漏和双重删除,以及异常安全等更微妙的问题。

您应该
new
It,因为构造函数不是由
malloc
调用的。谢谢!还有一个问题:如果我想为n个队列的数组分配内存,我应该怎么做?@valeera在我的示例中将16替换为
n
@valeera yes。它是。
std::vector<std::queue<int> > pq(16);