要了解realloc

时间:2015-04-26 17:50:15

标签: c++ realloc

我正在做一些实验来理解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;
}

当我输入值时,除了第一个节点之外,所有节点都被正确打印,其中它打印一些地址并且值为零。

为什么会这样? 提前致谢!!

1 个答案:

答案 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*));