我正在做一些实验来理解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;
}当我输入值时,除了第一个节点外,所有的节点都被准确地打印出来,在第一个节点中,它打印了一些地址和值0。
为什么会发生这种情况?提前感谢!!
发布于 2015-04-27 01:59:16
正如评论所说,malloc和realloc并不是真正的C++ --在C++中应该是std::vector<std::unique_ptr<Node>>。
也就是说,您所做的应该是有效的(因为您分配的是指向对象的指针数组,而不是对象,所以允许使用malloc/realloc ),除非您遗漏了一点:
你只分配了3个字节的内存,而不是3个指针。您需要:
node **n=(node**)malloc(3 * sizeof(Node*));和
n=(node **)realloc(n,5 * sizeof(Node*));https://stackoverflow.com/questions/29881222
复制相似问题