2015-04-26 25 views
0

我正在做一些实验来理解cpp中的realloc函数。 这是我的代码了解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

不要用C'malloc'或'realloc' ++。它们用于C,而内部的'new'通常(但是与实现有关)调用'malloc'(当然'delete'会调用'free'')。在C++中只使用'new'&'delete',最好隐式地使用*智能指针* –

+0

为什么这个问题被投下来了? – Kam

+0

@Kam可能是因为这不是C++ –

回答

3

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