gpt4 book ai didi

c++ - 理解realloc

转载 作者:行者123 更新时间:2023-11-28 00:16:35 26 4
gpt4 key购买 nike

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

关于c++ - 理解realloc,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29881222/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com