2015-04-26 2 views
0

Я делаю эксперимент, чтобы понять функцию realloc в 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

Не используйте 'malloc' или' realloc' в C++. Они для C, и внутренне 'new' часто (но это зависит от реализации), вызывающий' malloc' (и, конечно, 'delete' будет называть' free'). Используйте только 'new' &' delete' в C++, желательно неявно, используя * умные указатели * –

+0

Почему этот вопрос был проголосован? – Kam

+0

@ Кам, вероятно, потому, что это не C++ –

ответ

3

Как и комментарии, malloc и realloc на самом деле не являются C++ - std::vector<std::unique_ptr<Node>> - это то, что было бы на C++.

Это говорит, что вы делаете, должны работать (как вы выделить массив указателей на объекты, не объекты, поэтому таНос/перераспределить разрешена), за исключением того, вы пропустили один бит:

Вы выделяете только 3 байта памяти, а не 3 указателя. Вам нужно:

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

и

n=(node **)realloc(n,5 * sizeof(Node*)); 
Смежные вопросы