首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >了解realloc

了解realloc
EN

Stack Overflow用户
提问于 2015-04-27 01:50:15
回答 1查看 77关注 0票数 0

我正在做一些实验来理解cpp中的realloc函数。以下是我的代码

代码语言:javascript
复制
#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。

为什么会发生这种情况?提前感谢!!

EN

回答 1

Stack Overflow用户

发布于 2015-04-27 01:59:16

正如评论所说,malloc和realloc并不是真正的C++ --在C++中应该是std::vector<std::unique_ptr<Node>>

也就是说,您所做的应该是有效的(因为您分配的是指向对象的指针数组,而不是对象,所以允许使用malloc/realloc ),除非您遗漏了一点:

你只分配了3个字节的内存,而不是3个指针。您需要:

代码语言:javascript
复制
node **n=(node**)malloc(3 * sizeof(Node*));

代码语言:javascript
复制
n=(node **)realloc(n,5 * sizeof(Node*));
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29881222

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档