2017-01-18 8 views
0
struct node 
{ 
    int data; 
    node *right,*left; 
}; 

// A queue node 
struct Queue 
{ 
    int front, rear; 
    int size; 
    node* *array; 
}; 

// A utility function to create a new tree node 
node* newNode(int data) 
{ 
    node* temp = new node(); 
    temp->data = data; 
    temp->left = temp->right = NULL; 
    return temp; 
} 

// A utility function to create a new Queue 
Queue* createQueue(int size) 
{ 
    Queue* queue = new Queue(); 

    queue->front = queue->rear = -1; 
    queue->size = size; 

    **queue->array = (struct node**) malloc(queue->size * sizeof(struct node*));** 

//this is the malloc statement which i want to convert to new; 
    int i; 
    for (i = 0; i < size; ++i) 
     queue->array[i] = NULL; 

    return queue; 
} 

createQueue関数のmalloc()文をnew()に変換できません。 ヘルプが必要です。 また、その複雑なmalloc()ステートメントを次回のnew()ステートメントに変換する良い方法を私に提案してください。複雑なmalloc()をnew()とsuggsestに変換すると便利です。複雑なmallocを簡単に変換する良い方法

+0

C++オブジェクトでnewを呼び出すことができます。あなたは何らかのオブジェクトを体系化しようとしていますか? – levengli

+3

'**'を使って変更したいコードをマークするのは、この文に接頭辞が付いているときに意味があるので、この質問をするのは大きな間違いです。 – Peter

答えて

8

mallocの呼び出しでは、ポインタの配列をnodeに割り当てることができます。

上記の文はnodequeue->sizeポインタの配列を割り当て、また、デフォルトでは、彼らはすべてのヌル・ポインタになりますを意味し、各ポインタを初期化し

queue->array = new node*[queue->size]{}; 

ようにあなたが new[]を使用するC++で動的に配列を割り当てること(したがって、割り当て後にループは必要ありません)。

new[]で割り当てたすべてのものは、delete[]で割り当て解除する必要があります。


今、私たちはあなたの問題を解決していること、適切ソリューションはstd::vectorを使用する代わりに、動的にあなたが行うようにメモリを割り当てることです。

ポインタを使用せず、代わりに構造体のインスタンスを使用することをお勧めします。ベクトルの場合も、より一般的な場合もあります。多型性に加えて、現代のC++でポインタを使用する必要はほとんどありません。

+0

よろしくお願いします。あなたの解決策は、私が知りたいことすべてを私に説明します。 – CharchitJd

関連する問題