【问题标题】:To understand realloc了解重新分配
【发布时间】:2015-04-26 17:50:15
【问题描述】:

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

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

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

【问题讨论】:

  • 不要在 C++ 中使用 mallocrealloc。它们用于 C,内部 new 通常(但这取决于实现)调用malloc(当然delete 会调用free)。在 C++ 中仅使用 newdelete,最好使用 智能指针 隐式使用
  • 为什么这个问题被否决了?
  • @Kam 可能是因为这不是 C++

标签: c++ realloc


【解决方案1】:

就像 cmets 所说,malloc 和 realloc 并不是真正的 C++ - std::vector&lt;std::unique_ptr&lt;Node&gt;&gt; 是 C++ 中的内容。

也就是说,您所做的应该可以工作(因为您正在分配指向对象的指针数组,而不是对象,因此允许 malloc/realloc),除非您缺少一点:

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

node **n=(node**)malloc(3 * sizeof(Node*));

n=(node **)realloc(n,5 * sizeof(Node*));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-15
    • 2019-07-08
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多