2017-05-08 4 views
-2

この関数では、char値を戻して削除する必要があります(割り当てられたメモリを解放してください)。 この機能に問題がありますか?空きchar値よりも最初の返り値c

char* pqueue_poll(PrioQueue *queue) { 
     if (queue->root == NULL) { 
      return "NULL"; 
     } 

     else { 
      char* name = (char *) malloc(sizeof(char)*10); 
      q_elem *temp = queue->root; 

      name = temp->name;  
      queue->root = queue->root->next; 

      return name; 

      free(temp); 
      free(&temp->name); 
     } 
    } 

私は最初に無料で試してみましたが、結果は返されませんでした。私はvalgrindにいくつかのエラーがあります。私は戻って、ここでここで

+0

関数から返された後にどのように物事を解放すると思いますか? – John3136

+0

最初にフリーでリターンも返さない – Dmitry

+0

あなたは 'free(temp)'を呼び出し、次の行に 'temp'を使います!あなたが最初に戻ったので、どちらの線にも到達することはできません。また、いくつかのメモリを解放し、そのメモリへのポインタも返す予定です(明らかに動作しません)。 –

答えて

2

を削除したい値を返します 私は(削除せずに)また、別の関数を持っているだけで指すようにchar *nameを設定します

  • name = temp->name;あなたとの主要な問題のカップルのコードです返す文字列。 memcpyを実行してからメモリを解放する必要があります。 return
  • free

を実行されませしまいます決して私はあなたが何をしたいと思い

  1. 戻りデータ用のメモリを割り当て(または静的な配列を使用)されたコピーキュー
  2. からのデータ
  3. キュー構造内の空きメモリ
  4. ポインタを返します(どちらにするかはfreestaticバッファーを使用しなかった場合)
+0

スペースを割り当てたり、メモリをコピーして古いものを解放したりするのではなく、古いものを返すだけで済みます。 –

+0

@ M.M yup、別の方法。私はちょうどいくつかの静的配列にコピーし、メモリリークを避けるために後でどのように使用するか気にしないと思います。 – Elalfer

関連する問題