C++ 如何通过malloc为队列数组分配内存?
我尝试使用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
(*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);