我正在做一些实验来理解cpp中的realloc函数。 这是我的代码
#include <iostream>
#include <stdlib.h>
using namespace std;
class node
{
public:
int value;
int count;
node(void)
{
count=5;
}
};
int main(int argc, char const *argv[])
{
node **n=(node**)malloc(3);
for(int i=0;i<3;i++)
{
n[i]=new node();
cin>>n[i]->value;
}
n=(node **)realloc(n,5);
n[3]=new node();
cin>>n[3]->value;
n[4]=new node();
cin>>n[4]->value;
for(int i=0;i<5;i++)
{
cout<<n[i]->value<<"\t"<<n[i]->count<<endl;
}
return 0;
}
当我输入值时,除了第一个节点之外,所有节点都被正确打印,其中它打印一些地址并且值为零。
为什么会这样? 提前致谢!!
答案 0 :(得分:3)
就像评论所说的那样,malloc和realloc实际上不是C ++ - std::vector<std::unique_ptr<Node>>
就是C ++中的内容。
那就是说,你正在做什么应该工作(因为你正在分配一个指向对象的指针数组,而不是对象,所以允许使用malloc / realloc),除非你遗漏了一点:
你只分配3个字节的内存,而不是3个指针。你需要:
node **n=(node**)malloc(3 * sizeof(Node*));
和
n=(node **)realloc(n,5 * sizeof(Node*));