To understand realloc

To understand realloc

本文关键字:realloc understand To      更新时间:2023-10-16

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

当我输入值时,所有节点都完全打印,除了第一个节点,其中它打印了一些地址和值零。

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

就像评论所说,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*));